• Glauber Costa's avatar
    memcg: fix kmemcg registration for late caches · 4ba902b5
    Glauber Costa authored
    The designed workflow for the caches in kmemcg is: register it with
    memcg_register_cache() if kmemcg is already available or later on when a
    new kmemcg appears at memcg_update_cache_sizes() which will handle all
    caches in the system.  The caches created at boot time will be handled
    by the later, and the memcg-caches as well as any system caches that are
    registered later on by the former.
    
    There is a bug, however, in memcg_register_cache: we correctly set up
    the array size, but do not mark the cache as a root cache.
    
    This means that allocations for any cache appearing late in the game
    will see memcg->memcg_params->is_root_cache == false, and in particular,
    trigger VM_BUG_ON(!cachep->memcg_params->is_root_cache) in
    __memcg_kmem_cache_get.
    
    The obvious fix is to include the missing assignment.
    Signed-off-by: default avatarGlauber Costa <glommer@parallels.com>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4ba902b5
memcontrol.c 179 KB