cpusets: fix bug when adding nonexistent cpu or mem
Adding a nonexistent 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 occurs when add a nonexistent mem. This patch will fix this bug. And when *buf == "", the check is unneeded. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Acked-by: Paul Jackson <pj@sgi.com> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
aae8679b0e
commit
37340746a6
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue