[PATCH] cpuset: hotunplug cpus and mems in all cpusets
commitb1aac8bb824c658ddebd296b088a8bff5029c288
authorPaul Jackson <pj@sgi.com>
Fri, 29 Sep 2006 09:01:17 +0000 (29 02:01 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 29 Sep 2006 16:18:21 +0000 (29 09:18 -0700)
tree4b19b71fac4f769b7be7cff97ac7f6445d14d236
parent38837fc75acb7fa9b0e111b0241fe4fe76c5d4b3
[PATCH] cpuset: hotunplug cpus and mems in all cpusets

The cpuset code handling hot unplug of CPUs or Memory Nodes was incorrect -
it could remove a CPU or Node from the top cpuset, while leaving it still
in some child cpusets.

One basic rule of cpusets is that each cpusets cpus and mems are subsets of
its parents.  The cpuset hot unplug code violated this rule.

So the cpuset hotunplug handler must walk down the tree, removing any
removed CPU or Node from all cpusets.

However, it is not allowed to make a cpusets cpus or mems become empty.
They can only transition from empty to non-empty, not back.

So if the last CPU or Node would be removed from a cpuset by the above
walk, we scan back up the cpuset hierarchy, finding the nearest ancestor
that still has something online, and copy its CPU or Memory placement.

Signed-off-by: Paul Jackson <pj@sgi.com>
Cc: Nathan Lynch <ntl@pobox.com>
Cc: Anton Blanchard <anton@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
kernel/cpuset.c