vm_fault_t ret;
 
                pte_unmap_unlock(vmf->pte, vmf->ptl);
-               if (vmf->flags & FAULT_FLAG_VMA_LOCK) {
-                       vma_end_read(vmf->vma);
-                       return VM_FAULT_RETRY;
-               }
+               ret = vmf_can_call_fault(vmf);
+               if (ret)
+                       return ret;
 
                vmf->flags |= FAULT_FLAG_MKWRITE;
                ret = vma->vm_ops->pfn_mkwrite(vmf);
                vm_fault_t tmp;
 
                pte_unmap_unlock(vmf->pte, vmf->ptl);
-               if (vmf->flags & FAULT_FLAG_VMA_LOCK) {
+               tmp = vmf_can_call_fault(vmf);
+               if (tmp) {
                        folio_put(folio);
-                       vma_end_read(vmf->vma);
-                       return VM_FAULT_RETRY;
+                       return tmp;
                }
 
                tmp = do_page_mkwrite(vmf, folio);