diff options
-rw-r--r-- | kernel/cpuset.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 4683fe728c9b..7f384f4013b2 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -1438,10 +1438,9 @@ static void cpuset_attach(struct cgroup_subsys *ss, struct cgroup *cont, | |||
1438 | struct mm_struct *mm; | 1438 | struct mm_struct *mm; |
1439 | struct cpuset *cs = cgroup_cs(cont); | 1439 | struct cpuset *cs = cgroup_cs(cont); |
1440 | struct cpuset *oldcs = cgroup_cs(oldcont); | 1440 | struct cpuset *oldcs = cgroup_cs(oldcont); |
1441 | NODEMASK_ALLOC(nodemask_t, from, GFP_KERNEL); | ||
1442 | NODEMASK_ALLOC(nodemask_t, to, GFP_KERNEL); | 1441 | NODEMASK_ALLOC(nodemask_t, to, GFP_KERNEL); |
1443 | 1442 | ||
1444 | if (from == NULL || to == NULL) | 1443 | if (to == NULL) |
1445 | goto alloc_fail; | 1444 | goto alloc_fail; |
1446 | 1445 | ||
1447 | if (cs == &top_cpuset) { | 1446 | if (cs == &top_cpuset) { |
@@ -1463,18 +1462,16 @@ static void cpuset_attach(struct cgroup_subsys *ss, struct cgroup *cont, | |||
1463 | } | 1462 | } |
1464 | 1463 | ||
1465 | /* change mm; only needs to be done once even if threadgroup */ | 1464 | /* change mm; only needs to be done once even if threadgroup */ |
1466 | *from = oldcs->mems_allowed; | ||
1467 | *to = cs->mems_allowed; | 1465 | *to = cs->mems_allowed; |
1468 | mm = get_task_mm(tsk); | 1466 | mm = get_task_mm(tsk); |
1469 | if (mm) { | 1467 | if (mm) { |
1470 | mpol_rebind_mm(mm, to); | 1468 | mpol_rebind_mm(mm, to); |
1471 | if (is_memory_migrate(cs)) | 1469 | if (is_memory_migrate(cs)) |
1472 | cpuset_migrate_mm(mm, from, to); | 1470 | cpuset_migrate_mm(mm, &oldcs->mems_allowed, to); |
1473 | mmput(mm); | 1471 | mmput(mm); |
1474 | } | 1472 | } |
1475 | 1473 | ||
1476 | alloc_fail: | 1474 | alloc_fail: |
1477 | NODEMASK_FREE(from); | ||
1478 | NODEMASK_FREE(to); | 1475 | NODEMASK_FREE(to); |
1479 | } | 1476 | } |
1480 | 1477 | ||