|
@@ -1214,7 +1214,7 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
|
|
int retval = 0;
|
|
int retval = 0;
|
|
struct cgroup_subsys *ss;
|
|
struct cgroup_subsys *ss;
|
|
struct cgroup *oldcgrp;
|
|
struct cgroup *oldcgrp;
|
|
- struct css_set *cg = tsk->cgroups;
|
|
|
|
|
|
+ struct css_set *cg;
|
|
struct css_set *newcg;
|
|
struct css_set *newcg;
|
|
struct cgroupfs_root *root = cgrp->root;
|
|
struct cgroupfs_root *root = cgrp->root;
|
|
int subsys_id;
|
|
int subsys_id;
|
|
@@ -1234,11 +1234,16 @@ int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ task_lock(tsk);
|
|
|
|
+ cg = tsk->cgroups;
|
|
|
|
+ get_css_set(cg);
|
|
|
|
+ task_unlock(tsk);
|
|
/*
|
|
/*
|
|
* Locate or allocate a new css_set for this task,
|
|
* Locate or allocate a new css_set for this task,
|
|
* based on its final set of cgroups
|
|
* based on its final set of cgroups
|
|
*/
|
|
*/
|
|
newcg = find_css_set(cg, cgrp);
|
|
newcg = find_css_set(cg, cgrp);
|
|
|
|
+ put_css_set(cg);
|
|
if (!newcg)
|
|
if (!newcg)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|