mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
slub: Reflow ___slab_alloc()
[ Upstream commit 24c6a097b5
]
The get_partial() interface used in ___slab_alloc() may return a single
object in the "kmem_cache_debug(s)" case, in which we will just return
the "freelist" object.
Move this handling up to prepare for later changes.
And the "pfmemalloc_match()" part is not needed for node partial slab,
since we already check this in the get_partial_node().
Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
Tested-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Stable-dep-of: 850470a8413a ("mm: slub: avoid wake up kswapd in set_track_prepare")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e305ec2eac
commit
da1cf8ca0c
31
mm/slub.c
31
mm/slub.c
|
@ -3129,8 +3129,21 @@ new_objects:
|
|||
pc.slab = &slab;
|
||||
pc.orig_size = orig_size;
|
||||
freelist = get_partial(s, node, &pc);
|
||||
if (freelist)
|
||||
goto check_new_slab;
|
||||
if (freelist) {
|
||||
if (kmem_cache_debug(s)) {
|
||||
/*
|
||||
* For debug caches here we had to go through
|
||||
* alloc_single_from_partial() so just store the
|
||||
* tracking info and return the object.
|
||||
*/
|
||||
if (s->flags & SLAB_STORE_USER)
|
||||
set_track(s, freelist, TRACK_ALLOC, addr);
|
||||
|
||||
return freelist;
|
||||
}
|
||||
|
||||
goto retry_load_slab;
|
||||
}
|
||||
|
||||
slub_put_cpu_ptr(s->cpu_slab);
|
||||
slab = new_slab(s, gfpflags, node);
|
||||
|
@ -3166,20 +3179,6 @@ new_objects:
|
|||
|
||||
inc_slabs_node(s, slab_nid(slab), slab->objects);
|
||||
|
||||
check_new_slab:
|
||||
|
||||
if (kmem_cache_debug(s)) {
|
||||
/*
|
||||
* For debug caches here we had to go through
|
||||
* alloc_single_from_partial() so just store the tracking info
|
||||
* and return the object
|
||||
*/
|
||||
if (s->flags & SLAB_STORE_USER)
|
||||
set_track(s, freelist, TRACK_ALLOC, addr);
|
||||
|
||||
return freelist;
|
||||
}
|
||||
|
||||
if (unlikely(!pfmemalloc_match(slab, gfpflags))) {
|
||||
/*
|
||||
* For !pfmemalloc_match() case we don't load freelist so that
|
||||
|
|
Loading…
Reference in New Issue
Block a user