cpusets: fix bug of adding inexistent cpu or mem
PATCH 1/1 cpusets: fix bug of adding inexistent cpu or mem
Adding inexistent cpu to a cpuset will be omitted quietly. It should return -EINVAL.
Example: (real_nr_cpus <= 4 < NR_CPUS or cpu#4 was just offline)
# cat cpus 0-1 # /bin/echo 4 > cpus # /bin/echo $? 0 # cat cpus
#
The same as adding inexistent mem.
This patch will fix this bug.
And when *buf == "", the check is unneeded.
Signed-off-by Lai Jiangshan <[email protected]>
---
kernel/cpuset.c +7 -3
@@ -797,8 +797,10 @@ static int update_cpumask(struct cpuset *cs, char *buf) retval =cpulist_parse (buf, trialcs.cpus_allowed);if (retval <0 )return retval; + +if (!cpus_subset (trialcs.cpus_allowed, cpu_online_map)) +return -EINVAL ; } -cpus_and (trialcs.cpus_allowed, trialcs.cpus_allowed, cpu_online_map); retval =validate_change (cs, &trialcs);if (retval <0 )return retval;
@@ -932,9 +934,11 @@ static int update_nodemask(struct cpuset *cs, char *buf) retval =nodelist_parse (buf, trialcs.mems_allowed);if (retval <0 ) goto done; + +if (!nodes_subset (trialcs.mems_allowed, + node_states[N_HIGH_MEMORY ])) +return -EINVAL ; } -nodes_and (trialcs.mems_allowed, trialcs.mems_allowed, - node_states[N_HIGH_MEMORY ]); oldmem = cs->mems_allowed;if (nodes_equal (oldmem, trialcs.mems_allowed)) { retval =0 ;/* Too easy - nothing to do */
Quoted 2 lines · Lai
Adding inexistent cpu to a cpuset will be omitted quietly. It should return
-EINVAL.
I like this PATCH - thank-you. It was definitely a bug that trying to add a nonexistent CPU to a cpuset emptied that cpuset of its current CPUs, returning "success", not an "error".
Acked-by Paul Jackson <[email protected]>
(By the way, the word "inexistent" is not so commonly used as is the word "nonexistent", but both words are legitimate, and mean the same thing.)
Signature · 3 lines
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <[email protected]> 1.940.382.4214