]> git.baikalelectronics.ru Git - kernel.git/commit
mm: memcontrol: fix NR_WRITEBACK leak in memcg and system stats
authorJohannes Weiner <hannes@cmpxchg.org>
Wed, 21 Feb 2018 22:45:24 +0000 (14:45 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 21 Feb 2018 23:35:42 +0000 (15:35 -0800)
commit9094d7365f29780f18e0ebe890fc48a803056cd8
tree326e2c9da7bedf15bf0fd2505f8421c11b99f6bc
parent4d944e1eeccc1538b614349a468f1e01cad7ad29
mm: memcontrol: fix NR_WRITEBACK leak in memcg and system stats

After commit a9f2e2d4db71 ("mm: memcontrol: fix excessive complexity in
memory.stat reporting"), we observed slowly upward creeping NR_WRITEBACK
counts over the course of several days, both the per-memcg stats as well
as the system counter in e.g.  /proc/meminfo.

The conversion from full per-cpu stat counts to per-cpu cached atomic
stat counts introduced an irq-unsafe RMW operation into the updates.

Most stat updates come from process context, but one notable exception
is the NR_WRITEBACK counter.  While writebacks are issued from process
context, they are retired from (soft)irq context.

When writeback completions interrupt the RMW counter updates of new
writebacks being issued, the decs from the completions are lost.

Since the global updates are routed through the joint lruvec API, both
the memcg counters as well as the system counters are affected.

This patch makes the joint stat and event API irq safe.

Link: http://lkml.kernel.org/r/20180203082353.17284-1-hannes@cmpxchg.org
Fixes: a9f2e2d4db71 ("mm: memcontrol: fix excessive complexity in memory.stat reporting")
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Debugged-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Rik van Riel <riel@surriel.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Michal Hocko <mhocko@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/memcontrol.h