[PATCH 0/2] mm/hugetlb: fix surplus accounting and availability checks during demotion
From: Longlong Xia
Date: Sat Aug 22 2026 - 23:46:39 EST
From: Longlong Xia <xialonglong@xxxxxxxxxx>
This series fixes two problems in the hugetlb demote path.
Patch 1 fixes surplus accounting in the source hstate.
demote_pool_huge_page() removes every source folio as a persistent
folio, but a free folio may instead account for one of the source
hstate's surplus pages (for example after a vmemmap restoration
failure). Removing such a folio without adjusting surplus_huge_pages
makes the persistent count underflow, and later subtracting it from
max_huge_pages can underflow that counter as well.
Patch 2 fixes an availability overcount in the sysfs demote path. The
sysfs trigger checks whether any page is available but then passes the
entire request to demote_pool_huge_page(), which can remove free huge
pages that back existing reservations. With two free pages and one
reservation, a request for two pages removes both and leaves the
reservation without a backing page.
Both patches carry Fixes tags.
Longlong Xia (2):
mm/hugetlb: preserve source surplus accounting during demotion
mm/hugetlb: cap demotion at currently available free pages
mm/hugetlb.c | 57 ++++++++++++++++++++++++++++++++++++++++++----
mm/hugetlb_sysfs.c | 10 ++++----
2 files changed, 57 insertions(+), 10 deletions(-)
--
2.43.0