aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/mm/slub.c b/mm/slub.c
index bccfb6a17864..e2989ae243b5 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -719,9 +719,10 @@ static int check_object(struct kmem_cache *s, struct page *page,
719 endobject, red, s->inuse - s->objsize)) 719 endobject, red, s->inuse - s->objsize))
720 return 0; 720 return 0;
721 } else { 721 } else {
722 if ((s->flags & SLAB_POISON) && s->objsize < s->inuse) 722 if ((s->flags & SLAB_POISON) && s->objsize < s->inuse) {
723 check_bytes_and_report(s, page, p, "Alignment padding", endobject, 723 check_bytes_and_report(s, page, p, "Alignment padding",
724 POISON_INUSE, s->inuse - s->objsize); 724 endobject, POISON_INUSE, s->inuse - s->objsize);
725 }
725 } 726 }
726 727
727 if (s->flags & SLAB_POISON) { 728 if (s->flags & SLAB_POISON) {
@@ -928,11 +929,10 @@ static int free_debug_processing(struct kmem_cache *s, struct page *page,
928 return 0; 929 return 0;
929 930
930 if (unlikely(s != page->slab)) { 931 if (unlikely(s != page->slab)) {
931 if (!PageSlab(page)) 932 if (!PageSlab(page)) {
932 slab_err(s, page, "Attempt to free object(0x%p) " 933 slab_err(s, page, "Attempt to free object(0x%p) "
933 "outside of slab", object); 934 "outside of slab", object);
934 else 935 } else if (!page->slab) {
935 if (!page->slab) {
936 printk(KERN_ERR 936 printk(KERN_ERR
937 "SLUB <none>: no slab for object 0x%p.\n", 937 "SLUB <none>: no slab for object 0x%p.\n",
938 object); 938 object);
@@ -1041,7 +1041,7 @@ static unsigned long kmem_cache_flags(unsigned long objsize,
1041 */ 1041 */
1042 if (slub_debug && (!slub_debug_slabs || 1042 if (slub_debug && (!slub_debug_slabs ||
1043 strncmp(slub_debug_slabs, name, 1043 strncmp(slub_debug_slabs, name,
1044 strlen(slub_debug_slabs)) == 0)) 1044 strlen(slub_debug_slabs)) == 0))
1045 flags |= slub_debug; 1045 flags |= slub_debug;
1046 } 1046 }
1047 1047
@@ -1330,8 +1330,8 @@ static struct page *get_any_partial(struct kmem_cache *s, gfp_t flags)
1330 get_cycles() % 1024 > s->remote_node_defrag_ratio) 1330 get_cycles() % 1024 > s->remote_node_defrag_ratio)
1331 return NULL; 1331 return NULL;
1332 1332
1333 zonelist = &NODE_DATA(slab_node(current->mempolicy)) 1333 zonelist = &NODE_DATA(
1334 ->node_zonelists[gfp_zone(flags)]; 1334 slab_node(current->mempolicy))->node_zonelists[gfp_zone(flags)];
1335 for (z = zonelist->zones; *z; z++) { 1335 for (z = zonelist->zones; *z; z++) {
1336 struct kmem_cache_node *n; 1336 struct kmem_cache_node *n;
1337 1337
@@ -2589,7 +2589,8 @@ static noinline struct kmem_cache *dma_kmalloc_cache(int index, gfp_t flags)
2589 goto unlock_out; 2589 goto unlock_out;
2590 2590
2591 realsize = kmalloc_caches[index].objsize; 2591 realsize = kmalloc_caches[index].objsize;
2592 text = kasprintf(flags & ~SLUB_DMA, "kmalloc_dma-%d", (unsigned int)realsize), 2592 text = kasprintf(flags & ~SLUB_DMA, "kmalloc_dma-%d",
2593 (unsigned int)realsize);
2593 s = kmalloc(kmem_size, flags & ~SLUB_DMA); 2594 s = kmalloc(kmem_size, flags & ~SLUB_DMA);
2594 2595
2595 if (!s || !text || !kmem_cache_open(s, flags, text, 2596 if (!s || !text || !kmem_cache_open(s, flags, text,
@@ -3040,7 +3041,8 @@ void __init kmem_cache_init(void)
3040#endif 3041#endif
3041 3042
3042 3043
3043 printk(KERN_INFO "SLUB: Genslabs=%d, HWalign=%d, Order=%d-%d, MinObjects=%d," 3044 printk(KERN_INFO
3045 "SLUB: Genslabs=%d, HWalign=%d, Order=%d-%d, MinObjects=%d,"
3044 " CPUs=%d, Nodes=%d\n", 3046 " CPUs=%d, Nodes=%d\n",
3045 caches, cache_line_size(), 3047 caches, cache_line_size(),
3046 slub_min_order, slub_max_order, slub_min_objects, 3048 slub_min_order, slub_max_order, slub_min_objects,
@@ -3207,7 +3209,7 @@ static int __cpuinit slab_cpuup_callback(struct notifier_block *nfb,
3207} 3209}
3208 3210
3209static struct notifier_block __cpuinitdata slab_notifier = { 3211static struct notifier_block __cpuinitdata slab_notifier = {
3210 &slab_cpuup_callback, NULL, 0 3212 .notifier_call = slab_cpuup_callback
3211}; 3213};
3212 3214
3213#endif 3215#endif
@@ -3365,8 +3367,9 @@ static void resiliency_test(void)
3365 p = kzalloc(32, GFP_KERNEL); 3367 p = kzalloc(32, GFP_KERNEL);
3366 p[32 + sizeof(void *)] = 0x34; 3368 p[32 + sizeof(void *)] = 0x34;
3367 printk(KERN_ERR "\n2. kmalloc-32: Clobber next pointer/next slab" 3369 printk(KERN_ERR "\n2. kmalloc-32: Clobber next pointer/next slab"
3368 " 0x34 -> -0x%p\n", p); 3370 " 0x34 -> -0x%p\n", p);
3369 printk(KERN_ERR "If allocated object is overwritten then not detectable\n\n"); 3371 printk(KERN_ERR
3372 "If allocated object is overwritten then not detectable\n\n");
3370 3373
3371 validate_slab_cache(kmalloc_caches + 5); 3374 validate_slab_cache(kmalloc_caches + 5);
3372 p = kzalloc(64, GFP_KERNEL); 3375 p = kzalloc(64, GFP_KERNEL);
@@ -3374,7 +3377,8 @@ static void resiliency_test(void)
3374 *p = 0x56; 3377 *p = 0x56;
3375 printk(KERN_ERR "\n3. kmalloc-64: corrupting random byte 0x56->0x%p\n", 3378 printk(KERN_ERR "\n3. kmalloc-64: corrupting random byte 0x56->0x%p\n",
3376 p); 3379 p);
3377 printk(KERN_ERR "If allocated object is overwritten then not detectable\n\n"); 3380 printk(KERN_ERR
3381 "If allocated object is overwritten then not detectable\n\n");
3378 validate_slab_cache(kmalloc_caches + 6); 3382 validate_slab_cache(kmalloc_caches + 6);
3379 3383
3380 printk(KERN_ERR "\nB. Corruption after free\n"); 3384 printk(KERN_ERR "\nB. Corruption after free\n");
@@ -3387,7 +3391,8 @@ static void resiliency_test(void)
3387 p = kzalloc(256, GFP_KERNEL); 3391 p = kzalloc(256, GFP_KERNEL);
3388 kfree(p); 3392 kfree(p);
3389 p[50] = 0x9a; 3393 p[50] = 0x9a;
3390 printk(KERN_ERR "\n2. kmalloc-256: Clobber 50th byte 0x9a->0x%p\n\n", p); 3394 printk(KERN_ERR "\n2. kmalloc-256: Clobber 50th byte 0x9a->0x%p\n\n",
3395 p);
3391 validate_slab_cache(kmalloc_caches + 8); 3396 validate_slab_cache(kmalloc_caches + 8);
3392 3397
3393 p = kzalloc(512, GFP_KERNEL); 3398 p = kzalloc(512, GFP_KERNEL);