mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-31 21:31:36 -05:00
slub: Move node determination out of hotpath
If the node does not change then there is no need to recalculate the node from the page struct. So move the node determination into the places where we acquire a new slab page. Signed-off-by: Christoph Lameter <cl@linux.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
committed by
Pekka Enberg
parent
01ad8a7bc2
commit
dc1fb7f436
@@ -1828,7 +1828,6 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
|
||||
c->freelist = get_freepointer(s, object);
|
||||
page->inuse = page->objects;
|
||||
page->freelist = NULL;
|
||||
c->node = page_to_nid(page);
|
||||
|
||||
unlock_out:
|
||||
slab_unlock(page);
|
||||
@@ -1845,8 +1844,10 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
|
||||
new_slab:
|
||||
page = get_partial(s, gfpflags, node);
|
||||
if (page) {
|
||||
c->page = page;
|
||||
stat(s, ALLOC_FROM_PARTIAL);
|
||||
load_from_page:
|
||||
c->node = page_to_nid(page);
|
||||
c->page = page;
|
||||
goto load_freelist;
|
||||
}
|
||||
|
||||
@@ -1867,8 +1868,8 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
|
||||
|
||||
slab_lock(page);
|
||||
__SetPageSlubFrozen(page);
|
||||
c->page = page;
|
||||
goto load_freelist;
|
||||
|
||||
goto load_from_page;
|
||||
}
|
||||
if (!(gfpflags & __GFP_NOWARN) && printk_ratelimit())
|
||||
slab_out_of_memory(s, gfpflags, node);
|
||||
|
||||
Reference in New Issue
Block a user