diff options
author | Andrea Arcangeli <aarcange@redhat.com> | 2021-12-20 14:31:42 -0500 |
---|---|---|
committer | Andrea Arcangeli <aarcange@redhat.com> | 2023-11-11 22:03:35 -0500 |
commit | 177f9baf529f39ee1b3e26e35c2ebfd96f5abf8d (patch) | |
tree | e37a3d19038562d8671c42ee9da9ee122129735e | |
parent | 4db95902ae77bd32b2ab5ce21b0c68d083631522 (diff) | |
download | aa-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.c | 17 |
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); |