Skip to contentSkip to conversation

cpusets: fix bug of adding inexistent cpu or mem

PATCH In review Lai Jiangshan 2 participants 2 messages May 23, 2008

lore
Share & tools
lore
#0 lore raw

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.

---

kernel/cpuset.c +7 -3
index 86ea9e3..039baa4 100644
@@ -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 */
Acked-by on v1 1/1
#1 lore raw
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".

(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