[patch 05/10] SLUB: __slab_alloc() exit path consolidation

Christoph Lameter
2007-10-28T03:34:28Z

[-- Attachment #1: slub_slab_alloc_exit_paths --]
[-- Type: text/plain, Size: 1023 bytes --]

Use a single exit path by using goto's to the hottest exit path.

Signed-off-by: Christoph Lameter <clameter@sgi.com>

---
mm/slub.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

Index: linux-2.6/mm/slub.c
===================================================================
--- linux-2.6.orig/mm/slub.c 2007-10-25 19:38:14.000000000 -0700
+++ linux-2.6/mm/slub.c 2007-10-25 19:38:47.000000000 -0700
@@ -1493,7 +1493,9 @@ load_freelist:
c->page->inuse = s->objects;
c->page->freelist = NULL;
c->node = page_to_nid(c->page);
+unlock_out:
slab_unlock(c->page);
+out:
return object;

another_slab:
@@ -1541,7 +1543,8 @@ new_slab:
c->page = new;
goto load_freelist;
}
- return NULL;
+ object = NULL;
+ goto out;
debug:
object = c->page->freelist;
if (!alloc_debug_processing(s, c->page, object, addr))
@@ -1550,8 +1553,7 @@ debug:
c->page->inuse++;
c->page->freelist = object[c->offset];
c->node = -1;
- slab_unlock(c->page);
- return object;
+ goto unlock_out;
}

/*

--