mm-extract-mm_prepare_for_swap_entries-helper.patch removed from -mm tree
The quilt patch titled
Subject: mm: extract mm_prepare_for_swap_entries() helper
has been removed from the -mm tree. Its filename was
mm-extract-mm_prepare_for_swap_entries-helper.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Usama Arif <[email protected]>
Subject: mm: extract mm_prepare_for_swap_entries() helper
Date: Mon, 6 Jul 2026 04:42:04 -0700
When a swap entry is installed in a page table, the mm must be added to init_mm.mmlist so that swapoff can find and unuse its swap entries. This double-checked locking pattern is currently open-coded in try_to_unmap_one() and copy_nonpresent_pte().
Move it into mm_prepare_for_swap_entries() in mm/internal.h and convert both callers so it can be reused by upcoming PMD-level swap entry code paths that also need to register the mm with swapoff.
copy_nonpresent_pte() previously inserted into &src_mm->mmlist rather than &init_mm.mmlist, but the insertion point is irrelevant, mmlist is a circular list and swapoff walks it entirely from init_mm.mmlist, so only membership matters, not position.
---
mm/internal.h | 10 ++++++++++ mm/memory.c | 9 +-------- mm/rmap.c | 7 +------ 3 files changed, 12 insertions(+), 14 deletions(-)
mm/internal.h renamed from mm/internal.h~mm-extract-mm_prepare_for_swap_entries-helper +10 -0
@@ -1955,4 +1955,14 @@ static inline int get_sysctl_max_map_coubool may_expand_vm (struct mm_struct *mm,const vma_flags_t *vma_flags,unsigned long npages); +static inline void mm_prepare_for_swap_entries (struct mm_struct *mm) +{ +if (list_empty (&mm->mmlist)) { +spin_lock (&mmlist_lock); +if (list_empty (&mm->mmlist)) +list_add (&mm->mmlist, &init_mm.mmlist); +spin_unlock (&mmlist_lock); + } +} +#endif /* __MM_INTERNAL_H */
mm/memory.c renamed from mm/memory.c~mm-extract-mm_prepare_for_swap_entries-helper +1 -8
@@ -953,14 +953,7 @@ copy_nonpresent_pte(struct mm_struct *dsif (swap_dup_entry_direct (entry) <0 )return -EIO ; -/* make sure dst_mm is on swapoff's mmlist. */ -if (unlikely (list_empty (&dst_mm->mmlist))) { -spin_lock (&mmlist_lock); -if (list_empty (&dst_mm->mmlist)) -list_add (&dst_mm->mmlist, - &src_mm->mmlist); -spin_unlock (&mmlist_lock); - } +mm_prepare_for_swap_entries (dst_mm);/* Mark the swap entry as shared. */ if (pte_swp_exclusive (orig_pte)) { pte =pte_swp_clear_exclusive (orig_pte);
mm/rmap.c renamed from mm/rmap.c~mm-extract-mm_prepare_for_swap_entries-helper +1 -6
@@ -2304,12 +2304,7 @@ static bool try_to_unmap_one(struct foliset_pte_at (mm, address, pvmw.pte, pteval); goto walk_abort; } -if (list_empty (&mm->mmlist)) { -spin_lock (&mmlist_lock); -if (list_empty (&mm->mmlist)) -list_add (&mm->mmlist, &init_mm.mmlist); -spin_unlock (&mmlist_lock); - } +mm_prepare_for_swap_entries (mm);dec_mm_counter (mm,MM_ANONPAGES );inc_mm_counter (mm,MM_SWAPENTS ); swp_pte =swp_entry_to_pte (entry);
_
Patches currently in -mm which might be from [email protected] are
mm-mempolicy-skip-non-present-pmds-when-queueing-folios.patch mm-madvise-skip-device-private-pmds-in-cold-and-pageout-walks.patch mm-huge_memory-skip-device-private-pmds-in-madvise_free_huge_pmd.patch mm-vmstat-mm-memcontrol-add-_monotonic-vmstat-readers.patch mm-vmscan-reduce-lru_lock-contention-via-vmstat-derived-scan-balance-cost.patch