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
                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