The current memcg will be freed soon, so updating it's vmstat and vmevent values is pointless. Just skip updating it. Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx> --- mm/memcontrol.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index c0a90767e264..597fbe9acf93 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3700,7 +3700,7 @@ static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg) for (i = 0; i < MEMCG_NR_STAT; i++) stat[i] += per_cpu(memcg->vmstats_percpu->stat[i], cpu); - for (mi = memcg; mi; mi = parent_mem_cgroup(mi)) + for (mi = parent_mem_cgroup(memcg); mi; mi = parent_mem_cgroup(mi)) for (i = 0; i < MEMCG_NR_STAT; i++) atomic_long_add(stat[i], &mi->vmstats[i]); @@ -3716,7 +3716,8 @@ static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg) stat[i] += per_cpu( pn->lruvec_stat_cpu->count[i], cpu); - for (pi = pn; pi; pi = parent_nodeinfo(pi, node)) + for (pi = parent_nodeinfo(pn, node); pi; + pi = parent_nodeinfo(pi, node)) for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++) atomic_long_add(stat[i], &pi->lruvec_stat[i]); } @@ -3736,7 +3737,7 @@ static void memcg_flush_percpu_vmevents(struct mem_cgroup *memcg) events[i] += per_cpu(memcg->vmstats_percpu->events[i], cpu); - for (mi = memcg; mi; mi = parent_mem_cgroup(mi)) + for (mi = parent_mem_cgroup(memcg); mi; mi = parent_mem_cgroup(mi)) for (i = 0; i < NR_VM_EVENT_ITEMS; i++) atomic_long_add(events[i], &mi->vmevents[i]); } -- 2.11.0