summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2025-06-02 13:02:12 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-08-20 18:36:33 +0200
commit33ee6d6d21250fb23ec56ae657de500fab61ea8e (patch)
tree9edaca7c6ebb4c8c826192dcbb5a055ecaa5a155
parentd8c4b8847d1959367e42c9ea4517fedc28f266ad (diff)
downloadlinux-33ee6d6d21250fb23ec56ae657de500fab61ea8e.tar.gz
linux-33ee6d6d21250fb23ec56ae657de500fab61ea8e.tar.bz2
linux-33ee6d6d21250fb23ec56ae657de500fab61ea8e.zip
mm, slab: restore NUMA policy support for large kmalloc
commit e2d18cbf178775ad377ad88ee55e6e183c38d262 upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--mm/slub.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 5c73b956615f..b8d75fcabbc7 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4268,7 +4268,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,