The caller table can get quite large if there are many call sites for a particular slab. Using a virtual compound page allows fallback to vmalloc in case the caller table gets too big and memory is fragmented. Currently we would fail the operation. Signed-off-by: Christoph Lameter --- mm/slub.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) Index: linux-2.6.25-rc5-mm1/mm/slub.c =================================================================== --- linux-2.6.25-rc5-mm1.orig/mm/slub.c 2008-03-20 18:04:44.153110938 -0700 +++ linux-2.6.25-rc5-mm1/mm/slub.c 2008-03-20 19:40:17.103393950 -0700 @@ -21,6 +21,7 @@ #include #include #include +#include /* * Lock order: @@ -3372,8 +3373,7 @@ struct loc_track { static void free_loc_track(struct loc_track *t) { if (t->max) - free_pages((unsigned long)t->loc, - get_order(sizeof(struct location) * t->max)); + __free_vcompound(t->loc); } static int alloc_loc_track(struct loc_track *t, unsigned long max, gfp_t flags) @@ -3383,7 +3383,7 @@ static int alloc_loc_track(struct loc_tr order = get_order(sizeof(struct location) * max); - l = (void *)__get_free_pages(flags, order); + l = __alloc_vcompound(flags, order); if (!l) return 0; -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/