Re: [PATCH v5 29/32] mm: memcontrol: prepare for reparenting non-hierarchical stats
From: Qi Zheng
Date: Thu Feb 26 2026 - 01:46:07 EST
On 2/26/26 9:41 AM, Shakeel Butt wrote:
On Wed, Feb 25, 2026 at 03:53:12PM +0800, Qi Zheng wrote:
From: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
To resolve the dying memcg issue, we need to reparent LRU folios of child
memcg to its parent memcg. This could cause problems for non-hierarchical
stats.
As Yosry Ahmed pointed out:
```
In short, if memory is charged to a dying cgroup at the time of
reparenting, when the memory gets uncharged the stats updates will occur
at the parent. This will update both hierarchical and non-hierarchical
stats of the parent, which would corrupt the parent's non-hierarchical
stats (because those counters were never incremented when the memory was
charged).
```
Now we have the following two types of non-hierarchical stats, and they
are only used in CONFIG_MEMCG_V1:
a. memcg->vmstats->state_local[i]
b. pn->lruvec_stats->state_local[i]
To ensure that these non-hierarchical stats work properly, we need to
reparent these non-hierarchical stats after reparenting LRU folios. To
this end, this commit makes the following preparations:
1. implement reparent_state_local() to reparent non-hierarchical stats
2. make css_killed_work_fn() to be called in rcu work, and implement
get_non_dying_memcg_start() and get_non_dying_memcg_end() to avoid race
between mod_memcg_state()/mod_memcg_lruvec_state()
and reparent_state_local()
3. change these non-hierarchical stats to atomic_long_t type to avoid race
between mem_cgroup_stat_aggregate() and reparent_state_local()
Signed-off-by: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
[...]
--- a/mm/memcontrol-v1.h
+++ b/mm/memcontrol-v1.h
@@ -45,6 +45,7 @@ static inline bool do_memsw_account(void)
unsigned long memcg_events_local(struct mem_cgroup *memcg, int event);
unsigned long memcg_page_state_local(struct mem_cgroup *memcg, int idx);
+void mod_memcg_page_state_local(struct mem_cgroup *memcg, int idx, unsigned long val);
The above seems like addition by mistake.
Yes, my mistake, need to be deleted directly. ;)
After fixing this, you can add:
Acked-by: Shakeel Butt <shakeel.butt@xxxxxxxxx>
Thanks!