On Sat, 6 Feb 2010, Andi Kleen wrote: > > That other node must be allowed by current's cpuset, otherwise > > kmem_getpages() will fail when get_page_from_freelist() iterates only over > > unallowed nodes. > > All theses cases are really only interesting in the memory hotplug path > itself (afterwards the slab is working anyways and memory is there) > and if someone sets funny cpusets for those he gets what he deserves ... > If a hot-added node has not been initialized for the cache, your code is picking an existing one in zonelist order which may be excluded by current's cpuset. Thus, your code has a very real chance of having kmem_getpages() return NULL because get_page_from_freelist() will reject non-atomic ALLOC_CPUSET allocations for prohibited nodes. That isn't a scenario that requires a "funny cpuset," it just has to not allow whatever initialized node comes first in the zonelist. My suggested alternative does not pick a single initialized node, rather it tries all nodes that actually have a chance of having kmem_getpages() succeed which increases the probability that your patch actually has an effect for cpuset users. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>