• Vlastimil Babka's avatar
    mm/memcg: Convert slab objcgs from struct page to struct slab · 4b5f8d9a
    Vlastimil Babka authored
    page->memcg_data is used with MEMCG_DATA_OBJCGS flag only for slab pages
    so convert all the related infrastructure to struct slab. Also use
    struct folio instead of struct page when resolving object pointers.
    
    This is not just mechanistic changing of types and names. Now in
    mem_cgroup_from_obj() we use folio_test_slab() to decide if we interpret
    the folio as a real slab instead of a large kmalloc, instead of relying
    on MEMCG_DATA_OBJCGS bit that used to be checked in page_objcgs_check().
    Similarly in memcg_slab_free_hook() where we can encounter
    kmalloc_large() pages (here the folio slab flag check is implied by
    virt_to_slab()). As a result, page_objcgs_check() can be dropped instead
    of converted.
    
    To avoid include cycles, move the inline definition of slab_objcgs()
    from memcontrol.h to mm/slab.h.
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarRoman Gushchin <guro@fb.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: <cgroups@vger.kernel.org>
    4b5f8d9a
memcontrol.c 191 KB