Merge branch 'for-3.4' of git://linux-nfs.org/~bfields/linux
[linux-2.6-block.git] / fs / ext4 / page-io.c
index 74cd1f7f1f888947ac6ef3e2f07c7ec60a66a748..dcdeef169a69811cf995cd34c37bbdcb6d79fd52 100644 (file)
@@ -60,6 +60,7 @@ void ext4_ioend_wait(struct inode *inode)
 static void put_io_page(struct ext4_io_page *io_page)
 {
        if (atomic_dec_and_test(&io_page->p_count)) {
+               end_page_writeback(io_page->p_page);
                put_page(io_page->p_page);
                kmem_cache_free(io_page_cachep, io_page);
        }
@@ -233,9 +234,9 @@ static void ext4_end_bio(struct bio *bio, int error)
                        } while (bh != head);
                }
 
-               if (atomic_read(&io_end->pages[i]->p_count) == 1)
-                       end_page_writeback(io_end->pages[i]->p_page);
+               put_io_page(io_end->pages[i]);
        }
+       io_end->num_io_pages = 0;
        inode = io_end->inode;
 
        if (error) {
@@ -427,8 +428,6 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
         * PageWriteback bit from the page to prevent the system from
         * wedging later on.
         */
-       if (atomic_read(&io_page->p_count) == 1)
-               end_page_writeback(page);
        put_io_page(io_page);
        return ret;
 }