slub: Get rid of the another_slab label
authorChristoph Lameter <cl@linux.com>
Wed, 1 Jun 2011 17:25:56 +0000 (12:25 -0500)
committerPekka Enberg <penberg@kernel.org>
Sat, 2 Jul 2011 10:26:56 +0000 (13:26 +0300)
We can avoid deactivate slab in special cases if we do the
deactivation of slabs in each code flow that leads to new_slab.

Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
mm/slub.c

index cb6b0857e1a699c03fa8fb59839e9f70d1bd0628..41a15c1d8068c50781e94ac7fb72620289cb525a 100644 (file)
--- 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) {