diff options
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 31 |
1 files changed, 18 insertions, 13 deletions
@@ -805,6 +805,22 @@ fail: | |||
805 | return 0; | 805 | return 0; |
806 | } | 806 | } |
807 | 807 | ||
808 | static 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 | } |