• Hugh Dickins's avatar
    cgroup: use an ordered workqueue for cgroup destruction · ab3f5faa
    Hugh Dickins authored
    Sometimes the cleanup after memcg hierarchy testing gets stuck in
    mem_cgroup_reparent_charges(), unable to bring non-kmem usage down to 0.
    
    There may turn out to be several causes, but a major cause is this: the
    workitem to offline parent can get run before workitem to offline child;
    parent's mem_cgroup_reparent_charges() circles around waiting for the
    child's pages to be reparented to its lrus, but it's holding cgroup_mutex
    which prevents the child from reaching its mem_cgroup_reparent_charges().
    
    Just use an ordered workqueue for cgroup_destroy_wq.
    
    tj: Committing as the temporary fix until the reverse dependency can
        be removed from memcg.  Comment updated accordingly.
    
    Fixes: e5fca243 ("cgroup: use a dedicated workqueue for cgroup destruction")
    Suggested-by: default avatarFilipe Brandenburger <filbranden@google.com>
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Cc: stable@vger.kernel.org # 3.10+
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    ab3f5faa
cgroup.c 147 KB