From: Tejun Heo tj@kernel.org
commit 6b115bf58e6f013ca75e7115aabcbd56c20ff31d upstream.
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 Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
--- kernel/exit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
--- a/kernel/exit.c +++ b/kernel/exit.c @@ -194,6 +194,7 @@ repeat: rcu_read_unlock();
proc_flush_task(p); + cgroup_release(p);
write_lock_irq(&tasklist_lock); ptrace_release_task(p); @@ -219,7 +220,6 @@ repeat: }
write_unlock_irq(&tasklist_lock); - cgroup_release(p); release_thread(p); call_rcu(&p->rcu, delayed_put_task_struct);