[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