On Tue, Jun 04, 2019 at 07:44:53PM -0700, Roman Gushchin wrote: > Every slab page charged to a non-root memory cgroup has a pointer > to the memory cgroup and holds a reference to it, which protects > a non-empty memory cgroup from being released. At the same time > the page has a pointer to the corresponding kmem_cache, and also > hold a reference to the kmem_cache. And kmem_cache by itself > holds a reference to the cgroup. > > So there is clearly some redundancy, which allows to stop setting > the page->mem_cgroup pointer and rely on getting memcg pointer > indirectly via kmem_cache. Further it will allow to change this > pointer easier, without a need to go over all charged pages. > > So let's stop setting page->mem_cgroup pointer for slab pages, > and stop using the css refcounter directly for protecting > the memory cgroup from going away. Instead rely on kmem_cache > as an intermediate object. > > Make sure that vmstats and shrinker lists are working as previously, > as well as /proc/kpagecgroup interface. > > Signed-off-by: Roman Gushchin <guro@xxxxxx> Acked-by: Vladimir Davydov <vdavydov.dev@xxxxxxxxx>