On Mon, Aug 19, 2019 at 03:27:44PM -0700, Andrew Morton wrote: > On Mon, 19 Aug 2019 13:23:37 -0700 Roman Gushchin <guro@xxxxxx> wrote: > > > I've noticed that the "slab" value in memory.stat is sometimes 0, > > even if some children memory cgroups have a non-zero "slab" value. > > The following investigation showed that this is the result > > of the kmem_cache reparenting in combination with the per-cpu > > batching of slab vmstats. > > > > At the offlining some vmstat value may leave in the percpu cache, > > not being propagated upwards by the cgroup hierarchy. It means > > that stats on ancestor levels are lower than actual. Later when > > slab pages are released, the precise number of pages is substracted > > on the parent level, making the value negative. We don't show negative > > values, 0 is printed instead. > > > > To fix this issue, let's flush percpu slab memcg and lruvec stats > > on memcg offlining. This guarantees that numbers on all ancestor > > levels are accurate and match the actual number of outstanding > > slab pages. > > > > Fixes: fb2f2b0adb98 ("mm: memcg/slab: reparent memcg kmem_caches on cgroup removal") > > Signed-off-by: Roman Gushchin <guro@xxxxxx> > > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > > Cc: Michal Hocko <mhocko@xxxxxxxxxx> > > Cc: Vladimir Davydov <vdavydov.dev@xxxxxxxxx> > > [1/3] and [3/3] have cc:stable. [2/3] does not. However [3/3] does > not correctly apply without [2/3] having being applied. Right, [2/3] is required by slab kmem reparenting, which appeared in 5.3. I can rearrange [2/3] and [3/3] so that first two patches will have cc table and apply correctly. Let me do this, I'll send v3 shortly. Thanks!