aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/cgroup.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 75aec12c78a0..f24f724620dd 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -4883,19 +4883,10 @@ void cgroup_post_fork(struct task_struct *child)
4883 */ 4883 */
4884 if (use_task_css_set_links) { 4884 if (use_task_css_set_links) {
4885 write_lock(&css_set_lock); 4885 write_lock(&css_set_lock);
4886 if (list_empty(&child->cg_list)) { 4886 task_lock(child);
4887 /* 4887 if (list_empty(&child->cg_list))
4888 * It's safe to use child->cgroups without task_lock()
4889 * here because we are protected through
4890 * threadgroup_change_begin() against concurrent
4891 * css_set change in cgroup_task_migrate(). Also
4892 * the task can't exit at that point until
4893 * wake_up_new_task() is called, so we are protected
4894 * against cgroup_exit() setting child->cgroup to
4895 * init_css_set.
4896 */
4897 list_add(&child->cg_list, &child->cgroups->tasks); 4888 list_add(&child->cg_list, &child->cgroups->tasks);
4898 } 4889 task_unlock(child);
4899 write_unlock(&css_set_lock); 4890 write_unlock(&css_set_lock);
4900 } 4891 }
4901} 4892}