[PATCH 0/2] mm/hugetlb_cgroup: move the per-node usage along with the folio
From: Hongfu Li
Date: Wed Sep 16 2026 - 04:43:35 EST
The per-node usage reported by hugetlb.<size>.numa_stat is accounted
against folio_nid() in __hugetlb_cgroup_commit_charge() and
__hugetlb_cgroup_uncharge_folio(), so it is only correct while a folio
stays charged on the same node and in the same hugetlb_cgroup.
Two paths move a folio which stays charged, and neither moves the usage
with it. hugetlb_cgroup_migrate() only moves the hugetlb_cgroup pointers
of a folio migrated to another node, and hugetlb_cgroup_move_parent()
only moves the page_counter charges and the hugetlb_cgroup pointer of
the folios of a dying cgroup. In both cases the node (or cgroup) which
was charged keeps a usage which never goes away, while the node
(or cgroup) which ends up uncharging the folio underflows as soon as
the folio is freed.
Patch 1/2 moves the usage along with the folio on cross node migration,
patch 2/2 does the same for the folios a dying cgroup reparents.
Signed-off-by: Hongfu Li <lihongfu@xxxxxxxxxx>
---
Hongfu Li (2):
mm/hugetlb_cgroup: move per-node usage on cross node migration
mm/hugetlb_cgroup: move per-node usage on cgroup reparenting
mm/hugetlb_cgroup.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
---
base-commit: baa8de2f3448d1466a888a805c18d01c998fe052
change-id: 20260915-for-hugetlb-charge-2cfada8ed44e
Best regards,
--
Hongfu Li <lihongfu@xxxxxxxxxx>