[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:
parent
a283a52520
commit
5b74ada7ee
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue