diff options
Diffstat (limited to 'mm/filemap.c')
-rw-r--r-- | mm/filemap.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index 455119cc7f40..89ce6fe5f8be 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
@@ -124,6 +124,18 @@ void __remove_from_page_cache(struct page *page) | |||
124 | mapping->nrpages--; | 124 | mapping->nrpages--; |
125 | __dec_zone_page_state(page, NR_FILE_PAGES); | 125 | __dec_zone_page_state(page, NR_FILE_PAGES); |
126 | BUG_ON(page_mapped(page)); | 126 | BUG_ON(page_mapped(page)); |
127 | |||
128 | /* | ||
129 | * Some filesystems seem to re-dirty the page even after | ||
130 | * the VM has canceled the dirty bit (eg ext3 journaling). | ||
131 | * | ||
132 | * Fix it up by doing a final dirty accounting check after | ||
133 | * having removed the page entirely. | ||
134 | */ | ||
135 | if (PageDirty(page) && mapping_cap_account_dirty(mapping)) { | ||
136 | dec_zone_page_state(page, NR_FILE_DIRTY); | ||
137 | dec_bdi_stat(mapping->backing_dev_info, BDI_RECLAIMABLE); | ||
138 | } | ||
127 | } | 139 | } |
128 | 140 | ||
129 | void remove_from_page_cache(struct page *page) | 141 | void remove_from_page_cache(struct page *page) |