diff --git a/[refs] b/[refs] index aea712937df6..b9b7fe3b683f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 35e5d7ee27680aef6dc3fab45a5ecd9952d9791a +refs/heads/master: 636f0d7de8dc0282cce9905e035c04dd60db19dd diff --git a/trunk/mm/slub.c b/trunk/mm/slub.c index c58a974d15ac..dfbd0d874a00 100644 --- a/trunk/mm/slub.c +++ b/trunk/mm/slub.c @@ -805,6 +805,22 @@ static int free_object_checks(struct kmem_cache *s, struct page *page, 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 @@ static void *slab_alloc(struct kmem_cache *s, 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 @@ static void slab_free(struct kmem_cache *s, struct page *page, 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; }