[PATCH v3 0/5] mm/rmap: Refactor try_to_unmap_one

From: Dev Jain

Date: Mon Jul 13 2026 - 01:01:15 EST


In preparation for batching anonymous large folio unmapping to optimize it,
refactor try_to_unmap_one. This series refactors hugetlb, anon-lazyfree
and anon-swapbacked logic into their own functions, significantly
reducing the length of the huge try_to_unmap_one.

---
Split out from
https://lore.kernel.org/all/20260526063635.61721-1-dev.jain@xxxxxxx/

mm-selftests pass on arm64, built on arm64 and x86.

v2->v3:
- Patch 2: fix comment to say that TTU_HWPOISON can be true for small
folios only in try_to_unmap_one, since hugetlb bits are now refactored
away
- Patch 5: Directly do if (WARN_ON_ONCE())
- Rebase on latest mm-unstable to resolve conflicts with 30c83145c5b3
("mm: rename uffd-wp PTE accessors to uffd")

v1->v2:
- constify ttu flags in try_to_unmap_hugetlb_one, move const variables up
- Assert address passed to try_to_unmap_hugetlb_one equals pvmw.address
- Patch 3: code and comment polishing, do the stat update in the function
- Remove unnecessary inline hints, remove set_swp_pte_at, instead have
swp_pte_prepare + set_ptes. Rename subpage -> page. constify
anon_exclusive.
- Do pte restoration in caller

Dev Jain (5):
mm/rmap: convert page -> folio for hwpoison checks
mm/rmap: Add try_to_unmap_hugetlb_one
mm/rmap: refactor some code around lazyfree folio unmapping
mm/rmap: refactor anon folio unmap in try_to_unmap_one
mm/rmap: add anon folio unmap dispatcher

include/linux/hugetlb.h | 1 +
mm/rmap.c | 415 ++++++++++++++++++++++------------------
2 files changed, 232 insertions(+), 184 deletions(-)

--
2.43.0