From: Oscar Salvador Date: Fri, 11 Apr 2025 13:23:59 +0000 (+0200) Subject: mm,hugetlb: allocate frozen pages in alloc_buddy_hugetlb_folio X-Git-Tag: v6.16-rc1~92^2~166 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e7a446030bdaf6b4d933c53fd809cb83a0953ffe;p=thirdparty%2Flinux.git mm,hugetlb: allocate frozen pages in alloc_buddy_hugetlb_folio alloc_buddy_hugetlb_folio() allocates a rmappable folio, then strips the rmappable part and freezes it. We can simplify all that by allocating frozen pages directly. Link: https://lkml.kernel.org/r/20250411132359.312708-1-osalvador@suse.de Signed-off-by: Oscar Salvador Suggested-by: Vlastimil Babka Reviewed-by: Vlastimil Babka Reviewed-by: Matthew Wilcox (Oracle) Reviewed-by: David Hildenbrand Cc: Muchun Song Signed-off-by: Andrew Morton --- diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 38738293e6b67..351254ad6ef87 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1950,7 +1950,6 @@ static struct folio *alloc_buddy_hugetlb_folio(struct hstate *h, int order = huge_page_order(h); struct folio *folio; bool alloc_try_hard = true; - bool retry = true; /* * By default we always try hard to allocate the folio with @@ -1965,22 +1964,8 @@ static struct folio *alloc_buddy_hugetlb_folio(struct hstate *h, gfp_mask |= __GFP_RETRY_MAYFAIL; if (nid == NUMA_NO_NODE) nid = numa_mem_id(); -retry: - folio = __folio_alloc(gfp_mask, order, nid, nmask); - /* Ensure hugetlb folio won't have large_rmappable flag set. */ - if (folio) - folio_clear_large_rmappable(folio); - if (folio && !folio_ref_freeze(folio, 1)) { - folio_put(folio); - if (retry) { /* retry once */ - retry = false; - goto retry; - } - /* WOW! twice in a row. */ - pr_warn("HugeTLB unexpected inflated folio ref count\n"); - folio = NULL; - } + folio = (struct folio *)__alloc_frozen_pages(gfp_mask, order, nid, nmask); /* * If we did not specify __GFP_RETRY_MAYFAIL, but still got a