mirror of
https://github.com/torvalds/linux.git
synced 2026-10-10 20:38:02 +02:00
mm/slub: prevent pfmemalloc objects from entering the barn
kmem_cache_return_sheaf() may refill a partially consumed sheaf before
placing it in the barn. Without an explicit restriction, this refill may
draw objects from pfmemalloc slabs and consume emergency reserves.
Add __GFP_NOMEMALLOC so that returned sheaves are refilled only from
non-pfmemalloc slabs. Also add __GFP_NOWARN, as suggested by Hao Li,
because this refill is a best-effort attempt and failure is acceptable.
If the refill fails, flush and free the sheaf instead.
Fixes: 1ce20c28ea ("slab: handle pfmemalloc slabs properly with sheaves")
Cc: stable@vger.kernel.org
Signed-off-by: Shengming Hu <hu.shengming@zte.com.cn>
Reviewed-by: Harry Yoo (Oracle) <harry@kernel.org>
Reviewed-by: Hao Li <hao.li@linux.dev>
Link: https://patch.msgid.link/20260721084522552ZPa16p1SRj3PYat3sqxuN@zte.com.cn
Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
This commit is contained in:
parent
56aa9b819e
commit
9338b189be
|
|
@ -5149,7 +5149,7 @@ void kmem_cache_return_sheaf(struct kmem_cache *s, gfp_t gfp,
|
|||
* simply flush and free it.
|
||||
*/
|
||||
if (!barn || data_race(barn->nr_full) >= MAX_FULL_SHEAVES ||
|
||||
refill_sheaf(s, sheaf, gfp)) {
|
||||
refill_sheaf(s, sheaf, gfp | __GFP_NOMEMALLOC | __GFP_NOWARN)) {
|
||||
sheaf_flush_unused(s, sheaf);
|
||||
free_empty_sheaf(s, sheaf);
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user