]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - mm/filemap.c
HID: fix a potential bug in pointer casting
[linux-2.6-omap-h63xx.git] / mm / filemap.c
index 188cf5fd3e8d4acedec4e74c05375238526506e5..f4d0cded0e10aa21b02707fcaf99c4cbcafa4f06 100644 (file)
@@ -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)