Skip to content
  • Roman Gushchin's avatar
    mm: memcg/slab: use mem_cgroup_from_obj() · 4f103c63
    Roman Gushchin authored
    
    
    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 use the
    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: default avatarRoman Gushchin <guro@fb.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
    Acked-by: default avatarYafang Shao <laoar.shao@gmail.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Link: http://lkml.kernel.org/r/20200117203609.3146239-1-guro@fb.com
    
    
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4f103c63