On Tue, 9 Sep 2014 12:05:14 -0700 Nishanth Aravamudan [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Joonsoo Kim <redacted>
Update the SLUB code to search for partial slabs on the nearest node
with memory in the presence of memoryless nodes. Additionally, do not
consider it to be an ALLOC_NODE_MISMATCH (and deactivate the slab) when
a memoryless-node specified allocation goes off-node.
...
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1699,7 +1699,12 @@ static void *get_partial(struct kmem_cache *s, gfp_t flags, int node,
struct kmem_cache_cpu *c)
{
void *object;
- int searchnode = (node == NUMA_NO_NODE) ? numa_mem_id() : node;
+ int searchnode = node;
+
+ if (node == NUMA_NO_NODE)
+ searchnode = numa_mem_id();
+ else if (!node_present_pages(node))
+ searchnode = node_to_mem_node(node);
I expect a call to node_to_mem_node() will always be preceded by a test
of node_present_pages(). Perhaps node_to_mem_node() should just do the
node_present_pages() call itself?