|
@@ -124,6 +124,18 @@ void __remove_from_page_cache(struct page *page)
|
|
|
mapping->nrpages--;
|
|
|
__dec_zone_page_state(page, NR_FILE_PAGES);
|
|
|
BUG_ON(page_mapped(page));
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Some filesystems seem to re-dirty the page even after
|
|
|
+ * the VM has canceled the dirty bit (eg ext3 journaling).
|
|
|
+ *
|
|
|
+ * Fix it up by doing a final dirty accounting check after
|
|
|
+ * having removed the page entirely.
|
|
|
+ */
|
|
|
+ if (PageDirty(page) && mapping_cap_account_dirty(mapping)) {
|
|
|
+ dec_zone_page_state(page, NR_FILE_DIRTY);
|
|
|
+ dec_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void remove_from_page_cache(struct page *page)
|