Skip to content

Commit

Permalink
slub: Add kmalloc_large_node() to support kmalloc_node fallback
Browse files Browse the repository at this point in the history
Slub is missing some NUMA support for large kmallocs. Provide that.

Reviewed-by: Pekka Enberg <[email protected]>
Signed-off-by: Christoph Lameter <[email protected]>
  • Loading branch information
Christoph Lameter committed Mar 3, 2008
1 parent 7693143 commit f619cfe
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions mm/slub.c
Original file line number Diff line number Diff line change
Expand Up @@ -2592,13 +2592,24 @@ void *__kmalloc(size_t size, gfp_t flags)
}
EXPORT_SYMBOL(__kmalloc);

static void *kmalloc_large_node(size_t size, gfp_t flags, int node)
{
struct page *page = alloc_pages_node(node, flags | __GFP_COMP,
get_order(size));

if (page)
return page_address(page);
else
return NULL;
}

#ifdef CONFIG_NUMA
void *__kmalloc_node(size_t size, gfp_t flags, int node)
{
struct kmem_cache *s;

if (unlikely(size > PAGE_SIZE))
return kmalloc_large(size, flags);
return kmalloc_large_node(size, flags, node);

s = get_slab(size, flags);

Expand Down Expand Up @@ -3146,7 +3157,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
struct kmem_cache *s;

if (unlikely(size > PAGE_SIZE))
return kmalloc_large(size, gfpflags);
return kmalloc_large_node(size, gfpflags, node);

s = get_slab(size, gfpflags);

Expand Down

0 comments on commit f619cfe

Please sign in to comment.