aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2025-06-02 13:02:12 +0200
committerVlastimil Babka <vbabka@suse.cz>2025-06-17 11:57:22 +0200
commite2d18cbf178775ad377ad88ee55e6e183c38d262 (patch)
tree20f3d13056e43ce18cedecd0939faed1fa0a56d6
parentLinux 6.16-rc2 (diff)
downloadwireguard-linux-e2d18cbf178775ad377ad88ee55e6e183c38d262.tar.xz
wireguard-linux-e2d18cbf178775ad377ad88ee55e6e183c38d262.zip
mm, slab: restore NUMA policy support for large kmalloc
The slab allocator observes the task's NUMA policy in various places such as allocating slab pages. Large kmalloc() allocations used to do that too, until an unintended change by c4cab557521a ("mm/slab_common: cleanup kmalloc_large()") resulted in ignoring mempolicy and just preferring the local node. Restore the NUMA policy support. Fixes: c4cab557521a ("mm/slab_common: cleanup kmalloc_large()") Cc: <stable@vger.kernel.org> Acked-by: Christoph Lameter (Ampere) <cl@gentwo.org> Acked-by: Roman Gushchin <roman.gushchin@linux.dev> Reviewed-by: Harry Yoo <harry.yoo@oracle.com> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
-rw-r--r--mm/slub.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 31e11ef256f9..06d64a5fb1bf 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4269,7 +4269,12 @@ static void *___kmalloc_large_node(size_t size, gfp_t flags, int node)
flags = kmalloc_fix_flags(flags);
flags |= __GFP_COMP;
- folio = (struct folio *)alloc_pages_node_noprof(node, flags, order);
+
+ if (node == NUMA_NO_NODE)
+ folio = (struct folio *)alloc_pages_noprof(flags, order);
+ else
+ folio = (struct folio *)__alloc_pages_noprof(flags, order, node, NULL);
+
if (folio) {
ptr = folio_address(folio);
lruvec_stat_mod_folio(folio, NR_SLAB_UNRECLAIMABLE_B,