• Tejun Heo's avatar
    cgroup: move check_for_release(parent) call to the end of cgroup_destroy_locked() · 9e4173e1
    Tejun Heo authored
    Currently, check_for_release() on the parent of a destroyed cgroup is
    invoked from cgroup_destroy_css_killed().  This is because this is
    where the destroyed cgroup can be removed from the parent's children
    list.  check_for_release() tests the emptiness of the list directly,
    so invoking it before removing the cgroup from the list makes it think
    that the parent still has children even when it no longer does.
    
    This patch updates check_for_release() to use
    cgroup_has_live_children() instead of directly testing ->children
    emptiness and moves check_for_release(parent) earlier to the end of
    cgroup_destroy_locked().  As cgroup_has_live_children() ignores
    cgroups marked DEAD, check_for_release() functions correctly as long
    as it's called after asserting DEAD.
    
    This makes release notification slightly more timely and more
    importantly enables further simplification of cgroup destruction path.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarLi Zefan <lizefan@huawei.com>
    9e4173e1
cgroup.c 142 KB