aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2019-05-31 13:38:57 -0400
committerTejun Heo <tj@kernel.org>2019-05-31 13:38:57 -0400
commit6b115bf58e6f013ca75e7115aabcbd56c20ff31d (patch)
tree965ef5bcab73bbeacdfe1fbed8408300d2ecbcea /kernel/exit.c
parent8cfeb385e9ebda784dccd447fe0f784464ca6ee1 (diff)
cgroup: Call cgroup_release() before __exit_signal()
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>
Diffstat (limited to 'kernel/exit.c')
-rw-r--r--kernel/exit.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/exit.c b/kernel/exit.c
index 1803efb2922f..a75b6a7f458a 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -195,6 +195,7 @@ repeat:
195 rcu_read_unlock(); 195 rcu_read_unlock();
196 196
197 proc_flush_task(p); 197 proc_flush_task(p);
198 cgroup_release(p);
198 199
199 write_lock_irq(&tasklist_lock); 200 write_lock_irq(&tasklist_lock);
200 ptrace_release_task(p); 201 ptrace_release_task(p);
@@ -220,7 +221,6 @@ repeat:
220 } 221 }
221 222
222 write_unlock_irq(&tasklist_lock); 223 write_unlock_irq(&tasklist_lock);
223 cgroup_release(p);
224 release_thread(p); 224 release_thread(p);
225 call_rcu(&p->rcu, delayed_put_task_struct); 225 call_rcu(&p->rcu, delayed_put_task_struct);
226 226