summaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
authorChristoph Lameter <clameter@sgi.com>2007-05-09 11:32:42 +0200
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-09 21:30:45 +0200
commit636f0d7de8dc0282cce9905e035c04dd60db19dd (patch)
treea4fcb99b6fdc47ca865746bbbdcf9f693e4655b1 /mm/slub.c
parentSLUB: introduce DebugSlab(page) (diff)
downloadlinux-636f0d7de8dc0282cce9905e035c04dd60db19dd.tar.xz
linux-636f0d7de8dc0282cce9905e035c04dd60db19dd.zip
SLUB: consolidate trace code
Trace in both slab_alloc and slab_free has a lot of common code. Use a single function for both. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/mm/slub.c b/mm/slub.c
index c58a974d15ac..dfbd0d874a00 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -805,6 +805,22 @@ fail:
return 0;
}
+static void trace(struct kmem_cache *s, struct page *page, void *object, int alloc)
+{
+ if (s->flags & SLAB_TRACE) {
+ printk(KERN_INFO "TRACE %s %s 0x%p inuse=%d fp=0x%p\n",
+ s->name,
+ alloc ? "alloc" : "free",
+ object, page->inuse,
+ page->freelist);
+
+ if (!alloc)
+ print_section("Object", (void *)object, s->objsize);
+
+ dump_stack();
+ }
+}
+
/*
* Slab allocation and freeing
*/
@@ -1289,12 +1305,7 @@ debug:
goto another_slab;
if (s->flags & SLAB_STORE_USER)
set_track(s, object, TRACK_ALLOC, addr);
- if (s->flags & SLAB_TRACE) {
- printk(KERN_INFO "TRACE %s alloc 0x%p inuse=%d fp=0x%p\n",
- s->name, object, page->inuse,
- page->freelist);
- dump_stack();
- }
+ trace(s, page, object, 1);
init_object(s, object, 1);
goto have_object;
}
@@ -1379,13 +1390,7 @@ debug:
remove_full(s, page);
if (s->flags & SLAB_STORE_USER)
set_track(s, x, TRACK_FREE, addr);
- if (s->flags & SLAB_TRACE) {
- printk(KERN_INFO "TRACE %s free 0x%p inuse=%d fp=0x%p\n",
- s->name, object, page->inuse,
- page->freelist);
- print_section("Object", (void *)object, s->objsize);
- dump_stack();
- }
+ trace(s, page, object, 0);
init_object(s, object, 0);
goto checks_ok;
}