Messages in this thread Patch in this message | | | Date | Fri, 21 Nov 2008 16:49:16 +0800 | From | Lai Jiangshan <> | Subject | [PATCH] cgroups: add lock for child->cgroups in cgroup_post_fork() |
| |
when cgroup_post_fork() called, child is seen by find_task_by_vpid(), so child->cgroups maybe be changed, It'll incorrect.
child->cgroups<old>'s refcnt is decreased child->cgroups<new>'s refcnt is increased but child->cg_list is added to child->cgroups<old>'s list.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> --- diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 358e775..ddc10ac 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2823,8 +2831,10 @@ void cgroup_post_fork(struct task_struct *child) { if (use_task_css_set_links) { write_lock(&css_set_lock); + task_lock(child); if (list_empty(&child->cg_list)) list_add(&child->cg_list, &child->cgroups->tasks); + task_unlock(child); write_unlock(&css_set_lock); } }
| |