Commit c5d258e2 authored by T.J. Mercier's avatar T.J. Mercier Committed by Chen Ridong
Browse files

mm: memcg: don't periodically flush stats when memcg is disabled

mainline inclusion
from mainline-v6.9-rc1
commit 13ef7424577ff9b663aeaa4fda67e186d9856df3
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IB0CT3

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=13ef7424577ff9b663aeaa4fda67e186d9856df3

----------------------------------------------------------------------

The root memcg is onlined even when memcg is disabled.  When it's onlined
a 2 second periodic stat flush is started, but no stat flushing is
required when memcg is disabled because there can be no child memcgs.
Most calls to flush memcg stats are avoided when memcg is disabled as a
result of the mem_cgroup_disabled check added in 7d7ef0a4686a ("mm: memcg:
restore subtree stats flushing"), but the periodic flushing started in
mem_cgroup_css_online is not.  Skip it.

Link: https://lkml.kernel.org/r/20240126211927.1171338-1-tjmercier@google.com


Fixes: aa48e47e ("memcg: infrastructure to flush memcg stats")
Signed-off-by: default avatarT.J. Mercier <tjmercier@google.com>
Acked-by: default avatarShakeel Butt <shakeelb@google.com>
Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Acked-by: default avatarChris Li <chrisl@kernel.org>
Reported-by: default avatarMinchan Kim <minchan@google.com>
Reviewed-by: default avatarYosry Ahmed <yosryahmed@google.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Michal Koutn <mkoutny@suse.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>

Conflicts:
	mm/memcontrol.c
[context can not be matched]
Signed-off-by: default avatarChen Ridong <chenridong@huawei.com>
parent b1a48e24
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6581,7 +6581,7 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css)
	refcount_set(&memcg->id.ref, 1);
	css_get(css);

	if (unlikely(mem_cgroup_is_root(memcg)))
	if (unlikely(mem_cgroup_is_root(memcg)) && !mem_cgroup_disabled())
		queue_delayed_work(system_unbound_wq, &stats_flush_dwork,
				   2UL*HZ);
	return 0;