Fix kmem_cache_free performance regression in slab

The database performance group have found that half the cycles spent
in kmem_cache_free are spent in this one call to BUG_ON. Moving it
into the CONFIG_SLAB_DEBUG-only function cache_free_debugcheck() is a
performance win of almost 0.5% on their particular benchmark.

The call was added as part of commit ddc2e812d592457747c4367fb73edcaa8e1e49ff
with the comment that "overhead should be minimal". It may have been
minimal at the time, but it isn't now.

[ Quoth Pekka Enberg: "I don't think the BUG_ON per se caused the
performance regression but rather the virt_to_head_page() changes to
virt_to_cache() that were added later." ]

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Acked-by: Pekka J Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Matthew Wilcox and committed by Linus Torvalds 80cbd911 e1cca7e8

+2 -2
+2 -2
mm/slab.c
··· 2881 2881 unsigned int objnr; 2882 2882 struct slab *slabp; 2883 2883 2884 + BUG_ON(virt_to_cache(objp) != cachep); 2885 + 2884 2886 objp -= obj_offset(cachep); 2885 2887 kfree_debugcheck(objp); 2886 2888 page = virt_to_head_page(objp); ··· 3760 3758 void kmem_cache_free(struct kmem_cache *cachep, void *objp) 3761 3759 { 3762 3760 unsigned long flags; 3763 - 3764 - BUG_ON(virt_to_cache(objp) != cachep); 3765 3761 3766 3762 local_irq_save(flags); 3767 3763 debug_check_no_locks_freed(objp, obj_size(cachep));