Commit 7d188958 authored by Johannes Weiner's avatar Johannes Weiner Committed by Linus Torvalds

mm: memcg: only check for PageSwapCache when uncharging anon

Only anon pages that are uncharged at the time of the last page table
mapping vanishing may be in swapcache.

When shmem pages, file pages, swap-freed anon pages, or just migrated
pages are uncharged, they are known for sure to be not in swapcache.
Signed-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Acked-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: default avatarMichal Hocko <mhocko@suse.cz>
Cc: David Rientjes <rientjes@google.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Wanpeng Li <liwp.linux@gmail.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0c59b89c
...@@ -3093,8 +3093,6 @@ void mem_cgroup_uncharge_cache_page(struct page *page) ...@@ -3093,8 +3093,6 @@ void mem_cgroup_uncharge_cache_page(struct page *page)
{ {
VM_BUG_ON(page_mapped(page)); VM_BUG_ON(page_mapped(page));
VM_BUG_ON(page->mapping); VM_BUG_ON(page->mapping);
if (PageSwapCache(page))
return;
__mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE, false); __mem_cgroup_uncharge_common(page, MEM_CGROUP_CHARGE_TYPE_CACHE, false);
} }
...@@ -3159,8 +3157,6 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout) ...@@ -3159,8 +3157,6 @@ mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent, bool swapout)
if (!swapout) /* this was a swap cache but the swap is unused ! */ if (!swapout) /* this was a swap cache but the swap is unused ! */
ctype = MEM_CGROUP_CHARGE_TYPE_DROP; ctype = MEM_CGROUP_CHARGE_TYPE_DROP;
if (PageSwapCache(page))
return;
memcg = __mem_cgroup_uncharge_common(page, ctype, false); memcg = __mem_cgroup_uncharge_common(page, ctype, false);
/* /*
...@@ -3350,11 +3346,10 @@ void mem_cgroup_end_migration(struct mem_cgroup *memcg, ...@@ -3350,11 +3346,10 @@ void mem_cgroup_end_migration(struct mem_cgroup *memcg,
unused = oldpage; unused = oldpage;
} }
anon = PageAnon(used); anon = PageAnon(used);
if (!PageSwapCache(unused)) __mem_cgroup_uncharge_common(unused,
__mem_cgroup_uncharge_common(unused, anon ? MEM_CGROUP_CHARGE_TYPE_ANON
anon ? MEM_CGROUP_CHARGE_TYPE_ANON : MEM_CGROUP_CHARGE_TYPE_CACHE,
: MEM_CGROUP_CHARGE_TYPE_CACHE, true);
true);
css_put(&memcg->css); css_put(&memcg->css);
/* /*
* We disallowed uncharge of pages under migration because mapcount * We disallowed uncharge of pages under migration because mapcount
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment