From e64123fd795631dd5513f80a088f3301e0911b8c Mon Sep 17 00:00:00 2001 From: Curt Wohlgemuth Date: Mon, 5 Mar 2012 10:40:15 -0500 Subject: [PATCH] --- yaml --- r: 296567 b: refs/heads/master c: b43d17f319f2c502b17139d1cf70731b2b62c644 h: refs/heads/master i: 296565: 834c0a55f35f14de7919cd856c15190469116e06 296563: 87e64de96f565827f052b7ea22f3c47d8761219f 296559: f41d4873f26e2715253d372243e6d8c4f16d2883 v: v3 --- [refs] | 2 +- trunk/fs/ext4/page-io.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 4834729ef9af..dc76496bedef 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 491caa43639abcffaa645fbab372a7ef4ce2975c +refs/heads/master: b43d17f319f2c502b17139d1cf70731b2b62c644 diff --git a/trunk/fs/ext4/page-io.c b/trunk/fs/ext4/page-io.c index dcdeef169a69..74cd1f7f1f88 100644 --- a/trunk/fs/ext4/page-io.c +++ b/trunk/fs/ext4/page-io.c @@ -60,7 +60,6 @@ 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); } @@ -234,9 +233,9 @@ static void ext4_end_bio(struct bio *bio, int error) } while (bh != head); } - put_io_page(io_end->pages[i]); + if (atomic_read(&io_end->pages[i]->p_count) == 1) + end_page_writeback(io_end->pages[i]->p_page); } - io_end->num_io_pages = 0; inode = io_end->inode; if (error) { @@ -428,6 +427,8 @@ 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; }