cgroup: Call cgroup_release() before __exit_signal()
authorTejun Heo <tj@kernel.org>
Fri, 31 May 2019 17:38:57 +0000 (10:38 -0700)
committerTejun Heo <tj@kernel.org>
Fri, 31 May 2019 17:38:57 +0000 (10:38 -0700)
cgroup_release() calls cgroup_subsys->release() which is used by the
pids controller to uncharge its pid.  We want to use it to manage
iteration of dying tasks which requires putting it before
__unhash_process().  Move cgroup_release() above __exit_signal().
While this makes it uncharge before the pid is freed, pid is RCU freed
anyway and the window is very narrow.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
kernel/exit.c

index 1803efb..a75b6a7 100644 (file)
@@ -195,6 +195,7 @@ repeat:
        rcu_read_unlock();
 
        proc_flush_task(p);
+       cgroup_release(p);
 
        write_lock_irq(&tasklist_lock);
        ptrace_release_task(p);
@@ -220,7 +221,6 @@ repeat:
        }
 
        write_unlock_irq(&tasklist_lock);
-       cgroup_release(p);
        release_thread(p);
        call_rcu(&p->rcu, delayed_put_task_struct);