|
@@ -2135,14 +2135,17 @@ int cgroup_attach_proc(struct cgroup *cgrp, struct task_struct *leader)
|
|
|
oldcgrp = task_cgroup_from_root(tsk, root);
|
|
|
if (cgrp == oldcgrp)
|
|
|
continue;
|
|
|
- /* attach each task to each subsystem */
|
|
|
- for_each_subsys(root, ss) {
|
|
|
- if (ss->attach_task)
|
|
|
- ss->attach_task(cgrp, tsk);
|
|
|
- }
|
|
|
/* if the thread is PF_EXITING, it can just get skipped. */
|
|
|
retval = cgroup_task_migrate(cgrp, oldcgrp, tsk, true);
|
|
|
- BUG_ON(retval != 0 && retval != -ESRCH);
|
|
|
+ if (retval == 0) {
|
|
|
+ /* attach each task to each subsystem */
|
|
|
+ for_each_subsys(root, ss) {
|
|
|
+ if (ss->attach_task)
|
|
|
+ ss->attach_task(cgrp, tsk);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ BUG_ON(retval != -ESRCH);
|
|
|
+ }
|
|
|
}
|
|
|
/* nothing is sensitive to fork() after this point. */
|
|
|
|