On Fri, Jan 17, 2020 at 12:36 PM Roman Gushchin <guro@xxxxxx> wrote: > > Sometimes we need to get a memcg pointer from a charged kernel object. > The right way to get it depends on whether it's a proper slab object > or it's backed by raw pages (e.g. it's a vmalloc alloction). In the > first case the kmem_cache->memcg_params.memcg indirection should be > used; in other cases it's just page->mem_cgroup. > > To simplify this task and hide the implementation details let's > introduce a mem_cgroup_from_obj() helper, which takes a pointer > to any kernel object and returns a valid memcg pointer or NULL. > > Passing a kernel address rather than a pointer to a page will allow > to use this helper for per-object (rather than per-page) tracked > objects in the future. > > The caller is still responsible to ensure that the returned memcg > isn't going away underneath: take the rcu read lock, cgroup mutex etc; > depending on the context. > > mem_cgroup_from_kmem() defined in mm/list_lru.c is now obsolete > and can be removed. > > Signed-off-by: Roman Gushchin <guro@xxxxxx> > Acked-by: Yafang Shao <laoar.shao@xxxxxxxxx> Reviewed-by: Shakeel Butt <shakeelb@xxxxxxxxxx>