The pages aren't accounted at the root level, so we cannot uncharge the page to the memsw counter for the root memcg. Fix this. Fixes: 1f47b61fb407 ("mm: memcontrol: fix swap counter leak on swapout from offline cgroup") Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx> --- mm/memcontrol.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 533b4b31b464..7d765a106684 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -7155,7 +7155,8 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry) if (!cgroup_memory_noswap && memcg != swap_memcg) { if (!mem_cgroup_is_root(swap_memcg)) page_counter_charge(&swap_memcg->memsw, nr_entries); - page_counter_uncharge(&memcg->memsw, nr_entries); + if (!mem_cgroup_is_root(memcg)) + page_counter_uncharge(&memcg->memsw, nr_entries); } /* -- 2.11.0