From: Andrew Morton I'm getting zillions of undefined references to __kmalloc_size_too_large on alpha. For some reason alpha is building out-of-line copies of kmalloc_slab() into lots of compilation units. It turns out that gcc just isn't smart enough to work out that __builtin_contant_p(size)==true implies that __builtin_contant_p(index)==true. So let's give it a bit of help. Cc: Christoph Lameter Signed-off-by: Andrew Morton --- include/linux/slub_def.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff -puN include/linux/slub_def.h~slub-fix-handling-of-oversized-slabs include/linux/slub_def.h --- a/include/linux/slub_def.h~slub-fix-handling-of-oversized-slabs +++ a/include/linux/slub_def.h @@ -145,7 +145,12 @@ static inline struct kmem_cache *kmalloc if (index == 0) return NULL; - if (index < 0) { + /* + * This function only gets expanded if __builtin_constant_p(size), so + * testing it here shouldn't be needed. But some versions of gcc need + * help. + */ + if (__builtin_constant_p(size) && index < 0) { /* * Generate a link failure. Would be great if we could * do something to stop the compile here. _