Prev: [RFC] [PATCH 1/4] hugetlb: prepare exclusion control functions for hugepage
Next: [PATCH 4/4] correct locking functions of hugepage migration routine
From: Naoya Horiguchi on 12 Aug 2010 04:10 Basically it is user's responsibility to take care of race condition related to direct I/O, but some events which are out of user's control (such as memory failure) can happen at any time. So we need to lock and set/clear PG_writeback flags in dierct I/O code to protect from data loss. Signed-off-by: Naoya Horiguchi <n-horiguchi(a)ah.jp.nec.com> --- fs/direct-io.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/fs/direct-io.c b/fs/direct-io.c index 7600aac..0d0810d 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -439,7 +439,10 @@ static int dio_bio_complete(struct dio *dio, struct bio *bio) struct page *page = bvec[page_no].bv_page; if (dio->rw == READ && !PageCompound(page)) - set_page_dirty_lock(page); + set_page_dirty(page); + if (dio->rw & WRITE) + end_page_writeback(page); + unlock_page(page); page_cache_release(page); } bio_put(bio); @@ -702,11 +705,14 @@ submit_page_section(struct dio *dio, struct page *page, { int ret = 0; + lock_page(page); + if (dio->rw & WRITE) { /* * Read accounting is performed in submit_bio() */ task_io_account_write(len); + set_page_writeback(page); } /* -- 1.7.2.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |