From: Tejun Heo Date: Fri, 31 May 2019 17:38:57 +0000 (-0700) Subject: cgroup: Call cgroup_release() before __exit_signal() X-Git-Tag: v4.14.138~6 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=d7b538a6c9678fcc6f00b6024bcbfd4bb0593d1c;p=users%2Fdwmw2%2Flinux.git cgroup: Call cgroup_release() before __exit_signal() 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 Cc: Oleg Nesterov Signed-off-by: Greg Kroah-Hartman --- diff --git a/kernel/exit.c b/kernel/exit.c index 95ce231ff5e24..15437cfdcd70d 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -193,6 +193,7 @@ repeat: rcu_read_unlock(); proc_flush_task(p); + cgroup_release(p); write_lock_irq(&tasklist_lock); ptrace_release_task(p); @@ -218,7 +219,6 @@ repeat: } write_unlock_irq(&tasklist_lock); - cgroup_release(p); release_thread(p); call_rcu(&p->rcu, delayed_put_task_struct);