return -1;
 }
 
+static void dax_set_mapping(struct vm_fault *vmf, pfn_t pfn,
+                             unsigned long fault_size)
+{
+       unsigned long i, nr_pages = fault_size / PAGE_SIZE;
+       struct file *filp = vmf->vma->vm_file;
+       pgoff_t pgoff;
+
+       pgoff = linear_page_index(vmf->vma,
+                       ALIGN(vmf->address, fault_size));
+
+       for (i = 0; i < nr_pages; i++) {
+               struct page *page = pfn_to_page(pfn_t_to_pfn(pfn) + i);
+
+               if (page->mapping)
+                       continue;
+
+               page->mapping = filp->f_mapping;
+               page->index = pgoff + i;
+       }
+}
+
 static vm_fault_t __dev_dax_pte_fault(struct dev_dax *dev_dax,
                                struct vm_fault *vmf, pfn_t *pfn)
 {
                rc = VM_FAULT_SIGBUS;
        }
 
-       if (rc == VM_FAULT_NOPAGE) {
-               unsigned long i;
-               pgoff_t pgoff;
-
-               /*
-                * In the device-dax case the only possibility for a
-                * VM_FAULT_NOPAGE result is when device-dax capacity is
-                * mapped. No need to consider the zero page, or racing
-                * conflicting mappings.
-                */
-               pgoff = linear_page_index(vmf->vma,
-                               ALIGN(vmf->address, fault_size));
-               for (i = 0; i < fault_size / PAGE_SIZE; i++) {
-                       struct page *page;
-
-                       page = pfn_to_page(pfn_t_to_pfn(pfn) + i);
-                       if (page->mapping)
-                               continue;
-                       page->mapping = filp->f_mapping;
-                       page->index = pgoff + i;
-               }
-       }
+       if (rc == VM_FAULT_NOPAGE)
+               dax_set_mapping(vmf, pfn, fault_size);
        dax_read_unlock(id);
 
        return rc;