summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorTejun Heo2019-05-31 19:38:57 +0200
committerGreg Kroah-Hartman2019-08-09 17:52:34 +0200
commit7528e95b7519d24027a4362e2a05a12d4747586f (patch)
treeaeb4b27b1c59d8487362b52b1e8396bd8697725d /kernel
parentcompat_ioctl: pppoe: fix PPPOEIOCSFWD handling (diff)
downloadkernel-qcow2-linux-7528e95b7519d24027a4362e2a05a12d4747586f.tar.gz
kernel-qcow2-linux-7528e95b7519d24027a4362e2a05a12d4747586f.tar.xz
kernel-qcow2-linux-7528e95b7519d24027a4362e2a05a12d4747586f.zip
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 <tj@kernel.org> Cc: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/exit.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/exit.c b/kernel/exit.c
index 5c0964dc805a..e10de9836dd7 100644
--- 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);