mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-17 23:37:10 -04:00
slub: use N_NORMAL_MEMORY in can_free_to_pcs to handle remote frees
Memory hotplug now keeps N_NORMAL_MEMORY up to date correctly, so make can_free_to_pcs() use it. As a result, when freeing objects on memoryless nodes, or on nodes that have memory but only in ZONE_MOVABLE, the objects can be freed to the sheaf instead of going through the slow path. Signed-off-by: Hao Li <hao.li@linux.dev> Acked-by: Harry Yoo (Oracle) <harry@kernel.org> Acked-by: David Rientjes <rientjes@google.com> Link: https://patch.msgid.link/20260403073958.8722-1-hao.li@linux.dev Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
This commit is contained in:
committed by
Vlastimil Babka (SUSE)
parent
e65d430111
commit
7f9bb84fdb
@@ -6022,14 +6022,15 @@ static __always_inline bool can_free_to_pcs(struct slab *slab)
|
||||
goto check_pfmemalloc;
|
||||
|
||||
/*
|
||||
* Freed object isn't from this cpu's node, but that node is memoryless.
|
||||
* Freed object isn't from this cpu's node, but that node is memoryless
|
||||
* or only has ZONE_MOVABLE memory, which slab cannot allocate from.
|
||||
* Proceed as it's better to cache remote objects than falling back to
|
||||
* the slowpath for everything. The allocation side can never obtain
|
||||
* a local object anyway, if none exist. We don't have numa_mem_id() to
|
||||
* point to the closest node as we would on a proper memoryless node
|
||||
* setup.
|
||||
*/
|
||||
if (unlikely(!node_state(numa_node, N_MEMORY)))
|
||||
if (unlikely(!node_state(numa_node, N_NORMAL_MEMORY)))
|
||||
goto check_pfmemalloc;
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user