diff options
author | Tejun Heo <tj@kernel.org> | 2011-12-12 21:12:22 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2011-12-12 21:12:22 -0500 |
commit | 94196f51c1ee5bbad674de28c682b17d78adb8e6 (patch) | |
tree | a4965645000e9766f06ee7b5eb2bab098cde0f8c | |
parent | bb9d97b6dffa10cec5e1ce9adbce60f3c2b5eabc (diff) |
cgroup, cpuset: don't use ss->pre_attach()
->pre_attach() is supposed to be called before migration, which is
observed during process migration but task migration does it the other
way around. The only ->pre_attach() user is cpuset which can do the
same operaitons in ->can_attach(). Collapse cpuset_pre_attach() into
cpuset_can_attach().
-v2: Patch contamination from later patch removed. Spotted by Paul
Menage.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Frederic Weisbecker <fweisbec@gmail.com>
Acked-by: Paul Menage <paul@paulmenage.org>
Cc: Li Zefan <lizf@cn.fujitsu.com>
-rw-r--r-- | kernel/cpuset.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 9a8a61301524..42e568306382 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -1370,6 +1370,15 @@ static int fmeter_getrate(struct fmeter *fmp) | |||
1370 | return val; | 1370 | return val; |
1371 | } | 1371 | } |
1372 | 1372 | ||
1373 | /* | ||
1374 | * Protected by cgroup_lock. The nodemasks must be stored globally because | ||
1375 | * dynamically allocating them is not allowed in can_attach, and they must | ||
1376 | * persist until attach. | ||
1377 | */ | ||
1378 | static cpumask_var_t cpus_attach; | ||
1379 | static nodemask_t cpuset_attach_nodemask_from; | ||
1380 | static nodemask_t cpuset_attach_nodemask_to; | ||
1381 | |||
1373 | /* Called by cgroups to determine if a cpuset is usable; cgroup_mutex held */ | 1382 | /* Called by cgroups to determine if a cpuset is usable; cgroup_mutex held */ |
1374 | static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, | 1383 | static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, |
1375 | struct cgroup_taskset *tset) | 1384 | struct cgroup_taskset *tset) |
@@ -1396,29 +1405,16 @@ static int cpuset_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, | |||
1396 | if ((ret = security_task_setscheduler(task))) | 1405 | if ((ret = security_task_setscheduler(task))) |
1397 | return ret; | 1406 | return ret; |
1398 | } | 1407 | } |
1399 | return 0; | ||
1400 | } | ||
1401 | |||
1402 | /* | ||
1403 | * Protected by cgroup_lock. The nodemasks must be stored globally because | ||
1404 | * dynamically allocating them is not allowed in pre_attach, and they must | ||
1405 | * persist among pre_attach, and attach. | ||
1406 | */ | ||
1407 | static cpumask_var_t cpus_attach; | ||
1408 | static nodemask_t cpuset_attach_nodemask_from; | ||
1409 | static nodemask_t cpuset_attach_nodemask_to; | ||
1410 | |||
1411 | /* Set-up work for before attaching each task. */ | ||
1412 | static void cpuset_pre_attach(struct cgroup *cont) | ||
1413 | { | ||
1414 | struct cpuset *cs = cgroup_cs(cont); | ||
1415 | 1408 | ||
1409 | /* prepare for attach */ | ||
1416 | if (cs == &top_cpuset) | 1410 | if (cs == &top_cpuset) |
1417 | cpumask_copy(cpus_attach, cpu_possible_mask); | 1411 | cpumask_copy(cpus_attach, cpu_possible_mask); |
1418 | else | 1412 | else |
1419 | guarantee_online_cpus(cs, cpus_attach); | 1413 | guarantee_online_cpus(cs, cpus_attach); |
1420 | 1414 | ||
1421 | guarantee_online_mems(cs, &cpuset_attach_nodemask_to); | 1415 | guarantee_online_mems(cs, &cpuset_attach_nodemask_to); |
1416 | |||
1417 | return 0; | ||
1422 | } | 1418 | } |
1423 | 1419 | ||
1424 | static void cpuset_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, | 1420 | static void cpuset_attach(struct cgroup_subsys *ss, struct cgroup *cgrp, |
@@ -1904,7 +1900,6 @@ struct cgroup_subsys cpuset_subsys = { | |||
1904 | .create = cpuset_create, | 1900 | .create = cpuset_create, |
1905 | .destroy = cpuset_destroy, | 1901 | .destroy = cpuset_destroy, |
1906 | .can_attach = cpuset_can_attach, | 1902 | .can_attach = cpuset_can_attach, |
1907 | .pre_attach = cpuset_pre_attach, | ||
1908 | .attach = cpuset_attach, | 1903 | .attach = cpuset_attach, |
1909 | .populate = cpuset_populate, | 1904 | .populate = cpuset_populate, |
1910 | .post_clone = cpuset_post_clone, | 1905 | .post_clone = cpuset_post_clone, |