[PATCH v4 06/16] mm: hugetlb: Rename local variables for clarity in hugetlb_reserve_pages()
Ackerley Tng via B4 Relay <[email protected]> Wed, 22 Jul 2026 16:41:14 -0700
| Newsgroups | org.kernel.vger.cgroups,org.kernel.feeds.b4-sent,org.kernel.vger.linux-doc,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <20260722-hugetlb-alloc-failure-fixes-v4-6-88e8b81970dc@google.com> |
From: Ackerley Tng <[email protected]> In hugetlb_reserve_pages(), the return value of hugepage_subpool_get_pages() was named gbl_resv, while the return value of hugepage_subpool_put_pages() was named gbl_reserve. These variable names were inconsistent with the naming conventions established in alloc_hugetlb_folio(). Rename local variables in hugetlb_reserve_pages() to match naming in alloc_hugetlb_folio(). + Rename gbl_resv to gbl_resv_get, which is the number of global reservations required from the global pool (because neither reservation maps nor pre-existing subpool reservations could cover the request). If gbl_resv_get is 0, the reservation request is fully covered by pre-existing subpool reservations, so no additional global reservations are requested. If gbl_resv_get > 0, it represents the number of additional global reservations required, which are charged to global memory via hugetlb_acct_memory(h, gbl_resv_get). Note: gbl_resv_get in hugetlb_reserve_pages() is conceptually slightly different from gbl_resv_get in alloc_hugetlb_folio(): + In hugetlb_reserve_pages(): additional _reservations_ required, accounted using hugetlb_acct_memory() + In alloc_hugetlb_folio(): additional _pages_ required, no change to h->resv_huge_pages if gbl_resv_get > 0 + Rename gbl_reserve to gbl_resv_put, which is the number of pages the subpool could not absorb into its reservations during rollback (and are thus returned to the global pool). In error rollback paths, hugetlb_acct_memory(h, gbl_resv_get - gbl_resv_put) adjusts global reservations using the difference between global pages requested (gbl_resv_get) and global pages returned (gbl_resv_put). Signed-off-by: Ackerley Tng <[email protected]> --- mm/hugetlb.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 879e4640dc50d..8431c00d48267 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -6562,12 +6562,13 @@ long hugetlb_reserve_pages(struct inode *inode, struct vm_area_struct *vma, vma_flags_t vma_flags) { - long chg = -1, add = -1, gbl_resv; + long chg = -1, add = -1; struct hstate *h = hstate_inode(inode); struct hugepage_subpool *spool = subpool_inode(inode); struct resv_map *resv_map; struct hugetlb_cgroup *h_cg = NULL; - long gbl_reserve, regions_needed = 0; + long gbl_resv_get, gbl_resv_put; + long regions_needed = 0; int err; /* This should never happen */ @@ -6642,9 +6643,9 @@ long hugetlb_reserve_pages(struct inode *inode, * the subpool has a minimum size, there may be some global * reservations already in place (gbl_reserve). */ - gbl_resv = hugepage_subpool_get_pages(spool, chg); - if (gbl_resv < 0) { - err = gbl_resv; + gbl_resv_get = hugepage_subpool_get_pages(spool, chg); + if (gbl_resv_get < 0) { + err = gbl_resv_get; goto out_uncharge_cgroup; } @@ -6652,7 +6653,7 @@ long hugetlb_reserve_pages(struct inode *inode, * Check enough hugepages are available for the reservation. * Hand the pages back to the subpool if there are not */ - err = hugetlb_acct_memory(h, gbl_resv); + err = hugetlb_acct_memory(h, gbl_resv_get); if (err < 0) goto out_put_pages; @@ -6671,7 +6672,7 @@ long hugetlb_reserve_pages(struct inode *inode, add = region_add(resv_map, from, to, regions_needed, h, h_cg); if (unlikely(add < 0)) { - hugetlb_acct_memory(h, -gbl_resv); + hugetlb_acct_memory(h, -gbl_resv_get); err = add; goto out_put_pages; } else if (unlikely(chg > add)) { @@ -6713,14 +6714,14 @@ long hugetlb_reserve_pages(struct inode *inode, * tell us the new number of reservations that need to be * returned to the global pool. */ - gbl_reserve = hugepage_subpool_put_pages(spool, chg); + gbl_resv_put = hugepage_subpool_put_pages(spool, chg); /* * There may be a difference between the number of * reservations to consume and the number to restore now if * there are multiple threads interacting with the subpool - * restore the difference. */ - hugetlb_acct_memory(h, gbl_resv - gbl_reserve); + hugetlb_acct_memory(h, gbl_resv_get - gbl_resv_put); out_uncharge_cgroup: hugetlb_cgroup_uncharge_cgroup_rsvd(hstate_index(h), -- 2.55.0.229.g6434b31f56-goog