aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/page-io.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 74cd1f7f1f88..dcdeef169a69 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -60,6 +60,7 @@ void ext4_ioend_wait(struct inode *inode)
60static void put_io_page(struct ext4_io_page *io_page) 60static void put_io_page(struct ext4_io_page *io_page)
61{ 61{
62 if (atomic_dec_and_test(&io_page->p_count)) { 62 if (atomic_dec_and_test(&io_page->p_count)) {
63 end_page_writeback(io_page->p_page);
63 put_page(io_page->p_page); 64 put_page(io_page->p_page);
64 kmem_cache_free(io_page_cachep, io_page); 65 kmem_cache_free(io_page_cachep, io_page);
65 } 66 }
@@ -233,9 +234,9 @@ static void ext4_end_bio(struct bio *bio, int error)
233 } while (bh != head); 234 } while (bh != head);
234 } 235 }
235 236
236 if (atomic_read(&io_end->pages[i]->p_count) == 1) 237 put_io_page(io_end->pages[i]);
237 end_page_writeback(io_end->pages[i]->p_page);
238 } 238 }
239 io_end->num_io_pages = 0;
239 inode = io_end->inode; 240 inode = io_end->inode;
240 241
241 if (error) { 242 if (error) {
@@ -427,8 +428,6 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
427 * PageWriteback bit from the page to prevent the system from 428 * PageWriteback bit from the page to prevent the system from
428 * wedging later on. 429 * wedging later on.
429 */ 430 */
430 if (atomic_read(&io_page->p_count) == 1)
431 end_page_writeback(page);
432 put_io_page(io_page); 431 put_io_page(io_page);
433 return ret; 432 return ret;
434} 433}