提交 b00f9cc2 编写于 作者: S Shakeel Butt 提交者: Yang Yingliang

mm: memcontrol: fix percpu vmstats and vmevents flush

mainline inclusion
from mainline-v5.3-rc7
commit 6c1c2808
category: bugfix
bugzilla: 34611
CVE: NA

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

Instead of using raw_cpu_read() use per_cpu() to read the actual data of
the corresponding cpu otherwise we will be reading the data of the
current cpu for the number of online CPUs.

Link: http://lkml.kernel.org/r/20190829203110.129263-1-shakeelb@google.com
Fixes: bb65f89b ("mm: memcontrol: flush percpu vmevents before releasing memcg")
Fixes: c350a99e ("mm: memcontrol: flush percpu vmstats before releasing memcg")
Signed-off-by: NShakeel Butt <shakeelb@google.com>
Acked-by: NRoman Gushchin <guro@fb.com>
Acked-by: NMichal Hocko <mhocko@suse.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: NChen Zhou <chenzhou10@huawei.com>
Signed-off-by: NLiu Shixin <liushixin2@huawei.com>
Reviewed-by: NKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 388cef14
...@@ -3281,7 +3281,7 @@ static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg, bool slab_only) ...@@ -3281,7 +3281,7 @@ static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg, bool slab_only)
for_each_online_cpu(cpu) for_each_online_cpu(cpu)
for (i = min_idx; i < max_idx; i++) for (i = min_idx; i < max_idx; i++)
stat[i] += raw_cpu_read(memcg->vmstats_percpu->stat[i]); stat[i] += per_cpu(memcg->vmstats_percpu->stat[i], cpu);
for (mi = memcg; mi; mi = parent_mem_cgroup(mi)) for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
for (i = min_idx; i < max_idx; i++) for (i = min_idx; i < max_idx; i++)
...@@ -3299,8 +3299,8 @@ static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg, bool slab_only) ...@@ -3299,8 +3299,8 @@ static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg, bool slab_only)
for_each_online_cpu(cpu) for_each_online_cpu(cpu)
for (i = min_idx; i < max_idx; i++) for (i = min_idx; i < max_idx; i++)
stat[i] += raw_cpu_read( stat[i] += per_cpu(
pn->lruvec_stat_cpu->count[i]); pn->lruvec_stat_cpu->count[i], cpu);
for (pi = pn; pi; pi = parent_nodeinfo(pi, node)) for (pi = pn; pi; pi = parent_nodeinfo(pi, node))
for (i = min_idx; i < max_idx; i++) for (i = min_idx; i < max_idx; i++)
...@@ -3319,8 +3319,8 @@ static void memcg_flush_percpu_vmevents(struct mem_cgroup *memcg) ...@@ -3319,8 +3319,8 @@ static void memcg_flush_percpu_vmevents(struct mem_cgroup *memcg)
for_each_online_cpu(cpu) for_each_online_cpu(cpu)
for (i = 0; i < NR_VM_EVENT_ITEMS; i++) for (i = 0; i < NR_VM_EVENT_ITEMS; i++)
events[i] += raw_cpu_read( events[i] += per_cpu(memcg->vmstats_percpu->events[i],
memcg->vmstats_percpu->events[i]); cpu);
for (mi = memcg; mi; mi = parent_mem_cgroup(mi)) for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
for (i = 0; i < NR_VM_EVENT_ITEMS; i++) for (i = 0; i < NR_VM_EVENT_ITEMS; i++)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册