• Tejun Heo's avatar
    memcg: update memcg_has_children() to use css_next_child() · ea280e7b
    Tejun Heo authored
    Currently, memcg_has_children() and mem_cgroup_hierarchy_write()
    directly test cgroup->children for list emptiness.  It's semantically
    correct in traditional hierarchies as it actually wants to test for
    any children dead or alive; however, cgroup->children is not a
    published field and scheduled to go away.
    
    This patch moves out .use_hierarchy test out of memcg_has_children()
    and updates it to use css_next_child() to test whether there exists
    any children.  With .use_hierarchy test moved out, it can also be used
    by mem_cgroup_hierarchy_write().
    
    A side note: As .use_hierarchy is going away, it doesn't really matter
    but I'm not sure about how it's used in __memcg_activate_kmem().  The
    condition tested by memcg_has_children() is mushy when seen from
    userland as its result is affected by dead csses which aren't visible
    from userland.  I think the rule would be a lot clearer if we have a
    dedicated "freshly minted" flag which gets cleared when the first task
    is migrated into it or the first child is created and then gate
    activation with that.
    
    v2: Added comment noting that testing use_hierarchy is the
        responsibility of the callers of memcg_has_children() as suggested
        by Michal Hocko.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.cz>
    Acked-by: default avatarLi Zefan <lizefan@huawei.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    ea280e7b
memcontrol.c 191 KB