summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm/slub.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/mm/slub.c b/mm/slub.c
index cb6b0857e1a6..41a15c1d8068 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -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) {