mm-fix-finish_fault-handling-for-large-folios.patch removed from -mm tree
The quilt patch titled
Subject: mm: fix finish_fault() handling for large folios
has been removed from the -mm tree. Its filename was
mm-fix-finish_fault-handling-for-large-folios.patch
This patch was dropped because it was merged into the mm-hotfixes-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Brian Geffon <[email protected]>
Subject: mm: fix finish_fault() handling for large folios
Date: Wed, 26 Feb 2025 11:23:41 -0500
When handling faults for anon shmem finish_fault() will attempt to install ptes for the entire folio. Unfortunately if it encounters a single non-pte_none entry in that range it will bail, even if the pte that triggered the fault is still pte_none. When this situation happens the fault will be retried endlessly never making forward progress.
This patch fixes this behavior and if it detects that a pte in the range is not pte_none it will fall back to setting a single pte.
---
mm/memory.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
mm/memory.c renamed from mm/memory.c~mm-fix-finish_fault-handling-for-large-folios +10 -5
@@ -5185,7 +5185,11 @@ vm_fault_t finish_fault(struct vm_faultbool is_cow = (vmf->flags &FAULT_FLAG_WRITE ) && !(vma->vm_flags &VM_SHARED );int type, nr_pages; -unsigned long addr = vmf->address; +unsigned long addr; +bool needs_fallback = false; + +fallback: + addr = vmf->address;/* Did we COW the page? */ if (is_cow)
@@ -5224,7 +5228,8 @@ vm_fault_t finish_fault(struct vm_fault* approach also applies to non-anonymous-shmem faults to avoid * inflating the RSS of the process. */ -if (!vma_is_anon_shmem (vma) ||unlikely (userfaultfd_armed (vma))) { +if (!vma_is_anon_shmem (vma) ||unlikely (userfaultfd_armed (vma)) || +unlikely (needs_fallback)) { nr_pages =1 ; }else if (nr_pages >1 ) {pgoff_t idx =folio_page_idx (folio, page);
@@ -5260,9 +5265,9 @@ vm_fault_t finish_fault(struct vm_fault ret =VM_FAULT_NOPAGE ; goto unlock; }else if (nr_pages >1 && !pte_range_none (vmf->pte, nr_pages)) { -update_mmu_tlb_range (vma, addr, vmf->pte, nr_pages); - ret =VM_FAULT_NOPAGE ; - goto unlock; + needs_fallback = true; +pte_unmap_unlock (vmf->pte, vmf->ptl); + goto fallback; }folio_ref_add (folio, nr_pages -1 );
_
Patches currently in -mm which might be from [email protected] are