[PATCH 2/4] mm/huge_memory: add page->private check back in __split_folio_to_order()

From: Zi Yan

Date: Sun Jun 28 2026 - 22:57:35 EST


page->private should not be set in tail pages. Commit 4265d67e405a
("mm/migrate_device: add THP splitting during migration") removed it
without a proper reason. Add it back.

Signed-off-by: Zi Yan <ziy@xxxxxxxxxx>
---
mm/huge_memory.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 2bccb0a53a0a..037d67fbec6e 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -3594,6 +3594,16 @@ static void __split_folio_to_order(struct folio *folio, int old_order,
new_folio->mapping = folio->mapping;
new_folio->index = folio->index + i;

+ /*
+ * page->private should not be set in tail pages. Fix up and warn once
+ * if private is unexpectedly set. Do it before swap.val assignment
+ * since private overlaps with swap.val.
+ */
+ if (unlikely(new_folio->private)) {
+ VM_WARN_ON_ONCE_PAGE(true, new_head);
+ new_folio->private = NULL;
+ }
+
if (folio_test_swapcache(folio))
new_folio->swap.val = folio->swap.val + i;


--
2.53.0