@@ -1699,7 +1699,12 @@ static void *get_partial(struct kmem_cache *s, gfp_t flags, int node,
1699
1699
struct kmem_cache_cpu * c )
1700
1700
{
1701
1701
void * object ;
1702
- int searchnode = (node == NUMA_NO_NODE ) ? numa_mem_id () : node ;
1702
+ int searchnode = node ;
1703
+
1704
+ if (node == NUMA_NO_NODE )
1705
+ searchnode = numa_mem_id ();
1706
+ else if (!node_present_pages (node ))
1707
+ searchnode = node_to_mem_node (node );
1703
1708
1704
1709
object = get_partial_node (s , get_node (s , searchnode ), c , flags );
1705
1710
if (object || node != NUMA_NO_NODE )
@@ -2280,11 +2285,18 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
2280
2285
redo :
2281
2286
2282
2287
if (unlikely (!node_match (page , node ))) {
2283
- stat (s , ALLOC_NODE_MISMATCH );
2284
- deactivate_slab (s , page , c -> freelist );
2285
- c -> page = NULL ;
2286
- c -> freelist = NULL ;
2287
- goto new_slab ;
2288
+ int searchnode = node ;
2289
+
2290
+ if (node != NUMA_NO_NODE && !node_present_pages (node ))
2291
+ searchnode = node_to_mem_node (node );
2292
+
2293
+ if (unlikely (!node_match (page , searchnode ))) {
2294
+ stat (s , ALLOC_NODE_MISMATCH );
2295
+ deactivate_slab (s , page , c -> freelist );
2296
+ c -> page = NULL ;
2297
+ c -> freelist = NULL ;
2298
+ goto new_slab ;
2299
+ }
2288
2300
}
2289
2301
2290
2302
/*
0 commit comments