[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:
Родитель
a283a52520
Коммит
5b74ada7ee
|
@ -2318,13 +2318,15 @@ EXPORT_SYMBOL(kmem_cache_destroy);
|
|||
|
||||
/* Get the memory for a slab management obj. */
|
||||
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;
|
||||
|
||||
if (OFF_SLAB(cachep)) {
|
||||
/* 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)
|
||||
return NULL;
|
||||
} else {
|
||||
|
@ -2334,6 +2336,7 @@ static struct slab *alloc_slabmgmt(struct kmem_cache *cachep, void *objp,
|
|||
slabp->inuse = 0;
|
||||
slabp->colouroff = colour_off;
|
||||
slabp->s_mem = objp + colour_off;
|
||||
slabp->nodeid = nodeid;
|
||||
return slabp;
|
||||
}
|
||||
|
||||
|
@ -2519,7 +2522,7 @@ static int cache_grow(struct kmem_cache *cachep, gfp_t flags, int nodeid)
|
|||
goto failed;
|
||||
|
||||
/* Get slab management. */
|
||||
slabp = alloc_slabmgmt(cachep, objp, offset, local_flags);
|
||||
slabp = alloc_slabmgmt(cachep, objp, offset, local_flags, nodeid);
|
||||
if (!slabp)
|
||||
goto opps1;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче