X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Ffilemap.c;h=f4d0cded0e10aa21b02707fcaf99c4cbcafa4f06;hb=f3a2b29d932fbf92e133d814c4873fd15be51abc;hp=188cf5fd3e8d4acedec4e74c05375238526506e5;hpb=febb187761b02fce7d61b9c897d0e701f672b5ee;p=linux-2.6 diff --git a/mm/filemap.c b/mm/filemap.c index 188cf5fd3e..f4d0cded0e 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -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)