diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-04-11 11:16:39 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-04-11 11:16:39 +0800 |
commit | d83731cf53fd3af7173cab5e3f573d06ebc852be (patch) | |
tree | d61002ed1d894fe2d9b26003a1230f05a61ed51b /mm/truncate.c | |
parent | bfbd381ea0ca274e4c07ea62acaaeac31829cd5d (diff) | |
parent | 017cfa86c2450b158d7d0336f2f3ea685da1230b (diff) |
Merge branch 'linux-linaro-lsk-v4.1' into linux-linaro-lsk-v4.1-rtlsk-v4.1-16.04-rt
Diffstat (limited to 'mm/truncate.c')
-rw-r--r-- | mm/truncate.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/mm/truncate.c b/mm/truncate.c index 09598db42681..5f196420020c 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -119,9 +119,7 @@ truncate_complete_page(struct address_space *mapping, struct page *page) * the VM has canceled the dirty bit (eg ext3 journaling). * Hence dirty accounting check is placed after invalidation. */ - if (TestClearPageDirty(page)) - account_page_cleaned(page, mapping); - + cancel_dirty_page(page); ClearPageMappedToDisk(page); delete_from_page_cache(page); return 0; @@ -515,19 +513,24 @@ EXPORT_SYMBOL(invalidate_mapping_pages); static int invalidate_complete_page2(struct address_space *mapping, struct page *page) { + struct mem_cgroup *memcg; + unsigned long flags; + if (page->mapping != mapping) return 0; if (page_has_private(page) && !try_to_release_page(page, GFP_KERNEL)) return 0; - spin_lock_irq(&mapping->tree_lock); + memcg = mem_cgroup_begin_page_stat(page); + spin_lock_irqsave(&mapping->tree_lock, flags); if (PageDirty(page)) goto failed; BUG_ON(page_has_private(page)); - __delete_from_page_cache(page, NULL); - spin_unlock_irq(&mapping->tree_lock); + __delete_from_page_cache(page, NULL, memcg); + spin_unlock_irqrestore(&mapping->tree_lock, flags); + mem_cgroup_end_page_stat(memcg); if (mapping->a_ops->freepage) mapping->a_ops->freepage(page); @@ -535,7 +538,8 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page) page_cache_release(page); /* pagecache ref */ return 1; failed: - spin_unlock_irq(&mapping->tree_lock); + spin_unlock_irqrestore(&mapping->tree_lock, flags); + mem_cgroup_end_page_stat(memcg); return 0; } |