[PATCH] slab: allocate node local memory for off-slab slabmanagement

Allocate off-slab slab descriptors from node local memory.

Signed-off-by: Alok N Kataria <alokk@calsoftinc.com>
Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Shai Fultheim <shai@scalex86.org>
Acked-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Ravikiran G Thirumalai 2006-04-10 22:52:53 -07:00 committed by Linus Torvalds
parent a283a52520
commit 5b74ada7ee
1 changed files with 6 additions and 3 deletions

View File

@ -2318,13 +2318,15 @@ EXPORT_SYMBOL(kmem_cache_destroy);
/* Get the memory for a slab management obj. */ /* Get the memory for a slab management obj. */
static struct slab *alloc_slabmgmt(struct kmem_cache *cachep, void *objp, static struct slab *alloc_slabmgmt(struct kmem_cache *cachep, void *objp,
int colour_off, gfp_t local_flags) int colour_off, gfp_t local_flags,
int nodeid)
{ {
struct slab *slabp; struct slab *slabp;
if (OFF_SLAB(cachep)) { if (OFF_SLAB(cachep)) {
/* Slab management obj is off-slab. */ /* Slab management obj is off-slab. */
slabp = kmem_cache_alloc(cachep->slabp_cache, local_flags); slabp = kmem_cache_alloc_node(cachep->slabp_cache,
local_flags, nodeid);
if (!slabp) if (!slabp)
return NULL; return NULL;
} else { } else {
@ -2334,6 +2336,7 @@ static struct slab *alloc_slabmgmt(struct kmem_cache *cachep, void *objp,
slabp->inuse = 0; slabp->inuse = 0;
slabp->colouroff = colour_off; slabp->colouroff = colour_off;
slabp->s_mem = objp + colour_off; slabp->s_mem = objp + colour_off;
slabp->nodeid = nodeid;
return slabp; return slabp;
} }
@ -2519,7 +2522,7 @@ static int cache_grow(struct kmem_cache *cachep, gfp_t flags, int nodeid)
goto failed; goto failed;
/* Get slab management. */ /* Get slab management. */
slabp = alloc_slabmgmt(cachep, objp, offset, local_flags); slabp = alloc_slabmgmt(cachep, objp, offset, local_flags, nodeid);
if (!slabp) if (!slabp)
goto opps1; goto opps1;