From: Alexei Starovoitov Date: Tue, 1 Apr 2025 03:23:36 +0000 (-0700) Subject: mm/page_alloc: Fix try_alloc_pages X-Git-Tag: v6.15-rc1~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2985dae1e521ee1464130902415f5863ea05dc34;p=thirdparty%2Fkernel%2Flinux.git mm/page_alloc: Fix try_alloc_pages Fix an obvious bug. try_alloc_pages() should set_page_refcounted. [ Not so obvious: it was probably correct at the time it was written but was at some point then rebased on top of v6.14-rc1. And at that point there was a semantic conflict with commit efabfe1420f5 ("mm/page_alloc: move set_page_refcounted() to callers of get_page_from_freelist()") and became buggy. - Linus ] Fixes: 97769a53f117 ("mm, bpf: Introduce try_alloc_pages() for opportunistic page allocation") Signed-off-by: Alexei Starovoitov Reviewed-by: Shakeel Butt Acked-by: Michal Hocko Acked-by: Vlastimil BAbka Reviewed-by: Harry Yoo Signed-off-by: Linus Torvalds --- diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f51aa6051a998..5b173c2da6417 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -7385,6 +7385,9 @@ struct page *try_alloc_pages_noprof(int nid, unsigned int order) /* Unlike regular alloc_pages() there is no __alloc_pages_slowpath(). */ + if (page) + set_page_refcounted(page); + if (memcg_kmem_online() && page && unlikely(__memcg_kmem_charge_page(page, alloc_gfp, order) != 0)) { free_pages_nolock(page, order);