• Shakeel Butt's avatar
    memcg: css_tryget_online cleanups · 8965aa28
    Shakeel Butt authored
    Currently multiple locations in memcg code, css_tryget_online() is being
    used. However it doesn't matter whether the cgroup is online for the
    callers. Online used to matter when we had reparenting on offlining and
    we needed a way to prevent new ones from showing up.
    
    The failure case for couple of these css_tryget_online usage is to
    fallback to root_mem_cgroup which kind of make bypassing the memcg
    limits possible for some workloads. For example creating an inotify
    group in a subcontainer and then deleting that container after moving the
    process to a different container will make all the event objects
    allocated for that group to the root_mem_cgroup. So, using
    css_tryget_online() is dangerous for such cases.
    
    Two locations still use the online version. The swapin of offlined
    memcg's pages and the memcg kmem cache creation. The kmem cache indeed
    needs the online version as the kernel does the reparenting of memcg
    kmem caches. For the swapin case, it has been left for later as the
    fallback is not really that concerning.
    
    With swap accounting enabled, if the memcg of the swapped out page is
    not online then the memcg extracted from the given 'mm' will be charged
    and if 'mm' is NULL then root memcg will be charged.  However I could
    not find a code path where the given 'mm' will be NULL for swap-in
    case.
    Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Roman Gushchin <guro@fb.com>
    Link: http://lkml.kernel.org/r/20200302203109.179417-1-shakeelb@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8965aa28
memcontrol.c 187 KB