aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAndrea Arcangeli <aarcange@redhat.com>2021-12-20 14:31:42 -0500
committerAndrea Arcangeli <aarcange@redhat.com>2023-11-11 22:03:35 -0500
commit177f9baf529f39ee1b3e26e35c2ebfd96f5abf8d (patch)
treee37a3d19038562d8671c42ee9da9ee122129735e
parent4db95902ae77bd32b2ab5ce21b0c68d083631522 (diff)
downloadaa-177f9baf529f39ee1b3e26e35c2ebfd96f5abf8d.tar.gz
mm: COW/COR: de-dup the lock page locking
The COW and COR faults use the exact same page locking mechanism. Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
-rw-r--r--mm/memory.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 1a068fe9e42345..00f832e4b695be 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3440,21 +3440,8 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf)
if (PageKsm(vmf->page) && (PageSwapCache(vmf->page) ||
page_count(vmf->page) != 1))
goto copy;
- if (!trylock_page(vmf->page)) {
- get_page(vmf->page);
- pte_unmap_unlock(vmf->pte, vmf->ptl);
- lock_page(vmf->page);
- vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
- vmf->address, &vmf->ptl);
- if (!pte_same(*vmf->pte, vmf->orig_pte)) {
- update_mmu_tlb(vma, vmf->address, vmf->pte);
- unlock_page(vmf->page);
- pte_unmap_unlock(vmf->pte, vmf->ptl);
- put_page(vmf->page);
- return 0;
- }
- put_page(vmf->page);
- }
+ if (!smart_lock_page(vmf))
+ return 0;
if (PageKsm(vmf->page)) {
bool reused = reuse_ksm_page(vmf->page, vmf->vma,
vmf->address);