|
@@ -1965,8 +1965,10 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
|
|
|
if (!page)
|
|
|
goto new_slab;
|
|
|
|
|
|
- if (unlikely(!node_match(c, node)))
|
|
|
- goto another_slab;
|
|
|
+ if (unlikely(!node_match(c, node))) {
|
|
|
+ deactivate_slab(s, c);
|
|
|
+ goto new_slab;
|
|
|
+ }
|
|
|
|
|
|
stat(s, ALLOC_SLOWPATH);
|
|
|
|
|
@@ -1986,7 +1988,7 @@ load_freelist:
|
|
|
VM_BUG_ON(!page->frozen);
|
|
|
|
|
|
if (unlikely(!object))
|
|
|
- goto another_slab;
|
|
|
+ goto new_slab;
|
|
|
|
|
|
stat(s, ALLOC_REFILL);
|
|
|
|
|
@@ -1995,9 +1997,6 @@ load_freelist:
|
|
|
local_irq_restore(flags);
|
|
|
return object;
|
|
|
|
|
|
-another_slab:
|
|
|
- deactivate_slab(s, c);
|
|
|
-
|
|
|
new_slab:
|
|
|
page = get_partial(s, gfpflags, node);
|
|
|
if (page) {
|