[PATCH v3 08/13] WIP: mm: hugetlb: Make struct hugepage_subpool private to hugetlb_subpool.c
From: Ackerley Tng via B4 Relay
Date: Mon Jul 20 2026 - 22:58:29 EST
From: Ackerley Tng <ackerleytng@xxxxxxxxxx>
Now that all filesystem and memory management subpool layout inspections across
`fs/hugetlbfs/inode.c` and `mm/` leverage the exported, harmonized APIs, transition
`struct hugepage_subpool` out of the public header `include/linux/hugetlb.h` and
encapsulate it privately inside `mm/hugetlb_subpool.c`.
Replace the header definition with a forward declaration, completely protecting the
underlying subpool allocation counters, reservations, and spinlock boundaries.
Signed-off-by: Ackerley Tng <ackerleytng@xxxxxxxxxx>
---
include/linux/hugetlb.h | 13 ++-----------
mm/hugetlb_subpool.c | 12 ++++++++++++
2 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index f36be371c6e88..074a45903973e 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -18,6 +18,7 @@
struct mmu_gather;
struct node;
+struct hstate;
void free_huge_folio(struct folio *folio);
@@ -34,17 +35,7 @@ void free_huge_folio(struct folio *folio);
*/
#define __NR_USED_SUBPAGE 3
-struct hugepage_subpool {
- spinlock_t lock;
- long count;
- long max_hpages; /* Maximum huge pages or -1 if no maximum. */
- long used_hpages; /* Used page count, includes both */
- /* allocated and reserved pages. */
- struct hstate *hstate;
- long min_hpages; /* Minimum huge pages or -1 if no minimum. */
- long rsv_hpages; /* Pages reserved against global pool to */
- /* satisfy minimum size. */
-};
+struct hugepage_subpool;
struct resv_map {
struct kref refs;
diff --git a/mm/hugetlb_subpool.c b/mm/hugetlb_subpool.c
index 99e7975911079..eb5472bdf2192 100644
--- a/mm/hugetlb_subpool.c
+++ b/mm/hugetlb_subpool.c
@@ -14,6 +14,18 @@
#include <linux/bug.h>
#include "hugetlb_subpool.h"
+struct hugepage_subpool {
+ spinlock_t lock;
+ long count;
+ long max_hpages; /* Maximum huge pages or -1 if no maximum. */
+ long used_hpages; /* Used page count, includes both */
+ /* allocated and reserved pages. */
+ struct hstate *hstate;
+ long min_hpages; /* Minimum huge pages or -1 if no minimum. */
+ long rsv_hpages; /* Pages reserved against global pool to */
+ /* satisfy minimum size. */
+};
+
static inline bool subpool_is_free(struct hugepage_subpool *spool)
{
if (spool->count)
--
2.55.0.229.g6434b31f56-goog