aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-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:
805 return 0; 805 return 0;
806} 806}
807 807
808static void trace(struct kmem_cache *s, struct page *page, void *object, int alloc)
809{
810 if (s->flags & SLAB_TRACE) {
811 printk(KERN_INFO "TRACE %s %s 0x%p inuse=%d fp=0x%p\n",
812 s->name,
813 alloc ? "alloc" : "free",
814 object, page->inuse,
815 page->freelist);
816
817 if (!alloc)
818 print_section("Object", (void *)object, s->objsize);
819
820 dump_stack();
821 }
822}
823
808/* 824/*
809 * Slab allocation and freeing 825 * Slab allocation and freeing
810 */ 826 */
@@ -1289,12 +1305,7 @@ debug:
1289 goto another_slab; 1305 goto another_slab;
1290 if (s->flags & SLAB_STORE_USER) 1306 if (s->flags & SLAB_STORE_USER)
1291 set_track(s, object, TRACK_ALLOC, addr); 1307 set_track(s, object, TRACK_ALLOC, addr);
1292 if (s->flags & SLAB_TRACE) { 1308 trace(s, page, object, 1);
1293 printk(KERN_INFO "TRACE %s alloc 0x%p inuse=%d fp=0x%p\n",
1294 s->name, object, page->inuse,
1295 page->freelist);
1296 dump_stack();
1297 }
1298 init_object(s, object, 1); 1309 init_object(s, object, 1);
1299 goto have_object; 1310 goto have_object;
1300} 1311}
@@ -1379,13 +1390,7 @@ debug:
1379 remove_full(s, page); 1390 remove_full(s, page);
1380 if (s->flags & SLAB_STORE_USER) 1391 if (s->flags & SLAB_STORE_USER)
1381 set_track(s, x, TRACK_FREE, addr); 1392 set_track(s, x, TRACK_FREE, addr);
1382 if (s->flags & SLAB_TRACE) { 1393 trace(s, page, object, 0);
1383 printk(KERN_INFO "TRACE %s free 0x%p inuse=%d fp=0x%p\n",
1384 s->name, object, page->inuse,
1385 page->freelist);
1386 print_section("Object", (void *)object, s->objsize);
1387 dump_stack();
1388 }
1389 init_object(s, object, 0); 1394 init_object(s, object, 0);
1390 goto checks_ok; 1395 goto checks_ok;
1391} 1396}