diff options
author | Zefan Li <lizefan@huawei.com> | 2015-02-12 22:20:30 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2015-03-02 11:55:04 -0500 |
commit | 79063bffc81f82689bd90e16da1b49408f3bf095 (patch) | |
tree | f8bff040291a19286df85e9cd60a7648723f20c4 | |
parent | 790317e1b266c776765a4bdcedefea706ff0fada (diff) |
cpuset: fix a warning when clearing configured masks in old hierarchy
When we clear cpuset.cpus, cpuset.effective_cpus won't be cleared:
# mount -t cgroup -o cpuset xxx /mnt
# mkdir /mnt/tmp
# echo 0 > /mnt/tmp/cpuset.cpus
# echo > /mnt/tmp/cpuset.cpus
# cat cpuset.cpus
# cat cpuset.effective_cpus
0-15
And a kernel warning in update_cpumasks_hier() is triggered:
------------[ cut here ]------------
WARNING: CPU: 0 PID: 4028 at kernel/cpuset.c:894 update_cpumasks_hier+0x471/0x650()
Cc: <stable@vger.kernel.org> # 3.17+
Signed-off-by: Zefan Li <lizefan@huawei.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Tested-by: Serge Hallyn <serge.hallyn@canonical.com>
-rw-r--r-- | kernel/cpuset.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 89d4ed08afba..407611ba371b 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -873,7 +873,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct cpumask *new_cpus) | |||
873 | * If it becomes empty, inherit the effective mask of the | 873 | * If it becomes empty, inherit the effective mask of the |
874 | * parent, which is guaranteed to have some CPUs. | 874 | * parent, which is guaranteed to have some CPUs. |
875 | */ | 875 | */ |
876 | if (cpumask_empty(new_cpus)) | 876 | if (cgroup_on_dfl(cp->css.cgroup) && cpumask_empty(new_cpus)) |
877 | cpumask_copy(new_cpus, parent->effective_cpus); | 877 | cpumask_copy(new_cpus, parent->effective_cpus); |
878 | 878 | ||
879 | /* Skip the whole subtree if the cpumask remains the same. */ | 879 | /* Skip the whole subtree if the cpumask remains the same. */ |
@@ -1129,7 +1129,7 @@ static void update_nodemasks_hier(struct cpuset *cs, nodemask_t *new_mems) | |||
1129 | * If it becomes empty, inherit the effective mask of the | 1129 | * If it becomes empty, inherit the effective mask of the |
1130 | * parent, which is guaranteed to have some MEMs. | 1130 | * parent, which is guaranteed to have some MEMs. |
1131 | */ | 1131 | */ |
1132 | if (nodes_empty(*new_mems)) | 1132 | if (cgroup_on_dfl(cp->css.cgroup) && nodes_empty(*new_mems)) |
1133 | *new_mems = parent->effective_mems; | 1133 | *new_mems = parent->effective_mems; |
1134 | 1134 | ||
1135 | /* Skip the whole subtree if the nodemask remains the same. */ | 1135 | /* Skip the whole subtree if the nodemask remains the same. */ |