page_writeback: revive cancel_dirty_page() in a restricted form
authorTejun Heo <tj@kernel.org>
Fri, 22 May 2015 21:13:15 +0000 (17:13 -0400)
committerJens Axboe <axboe@fb.com>
Tue, 2 Jun 2015 14:33:33 +0000 (08:33 -0600)
cancel_dirty_page() had some issues and b9ea25152e56 ("page_writeback:
clean up mess around cancel_dirty_page()") replaced it with
account_page_cleaned() which makes the caller responsible for clearing
the dirty bit; unfortunately, the planned changes for cgroup writeback
support requires synchronization between dirty bit manipulation and
stat updates.  While we can open-code such synchronization in each
account_page_cleaned() callsite, that's gonna be unnecessarily awkward
and verbose.

This patch revives cancel_dirty_page() but in a more restricted form.
All it does is TestClearPageDirty() followed by account_page_cleaned()
invocation if the page was dirty.  This helper covers all
account_page_cleaned() usages except for __delete_from_page_cache()
which is a special case anyway and left alone.  As this leaves no
module user for account_page_cleaned(), EXPORT_SYMBOL() is dropped
from it.

This patch just revives cancel_dirty_page() as a trivial wrapper to
replace equivalent usages and doesn't introduce any functional
changes.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/staging/lustre/lustre/include/linux/lustre_patchless_compat.h
fs/buffer.c
include/linux/mm.h
mm/page-writeback.c
mm/truncate.c

index d726058..1456278 100644 (file)
@@ -55,9 +55,7 @@ truncate_complete_page(struct address_space *mapping, struct page *page)
        if (PagePrivate(page))
                page->mapping->a_ops->invalidatepage(page, 0, PAGE_CACHE_SIZE);
 
-       if (TestClearPageDirty(page))
-               account_page_cleaned(page, mapping);
-
+       cancel_dirty_page(page);
        ClearPageMappedToDisk(page);
        ll_delete_from_page_cache(page);
 }
diff --cc fs/buffer.c
Simple merge
Simple merge
Simple merge
diff --cc mm/truncate.c
Simple merge