perf top: Add overwrite fall back
[linux-2.6-microblaze.git] / fs / dax.c
index 6ee6f7e..0276df9 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1095,7 +1095,7 @@ static bool dax_fault_is_synchronous(unsigned long flags,
 }
 
 static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
-                              const struct iomap_ops *ops)
+                              int *iomap_errp, const struct iomap_ops *ops)
 {
        struct vm_area_struct *vma = vmf->vma;
        struct address_space *mapping = vma->vm_file->f_mapping;
@@ -1148,6 +1148,8 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
         * that we never have to deal with more than a single extent here.
         */
        error = ops->iomap_begin(inode, pos, PAGE_SIZE, flags, &iomap);
+       if (iomap_errp)
+               *iomap_errp = error;
        if (error) {
                vmf_ret = dax_fault_return(error);
                goto unlock_entry;
@@ -1481,6 +1483,7 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
  * @vmf: The description of the fault
  * @pe_size: Size of the page to fault in
  * @pfnp: PFN to insert for synchronous faults if fsync is required
+ * @iomap_errp: Storage for detailed error code in case of error
  * @ops: Iomap ops passed from the file system
  *
  * When a page fault occurs, filesystems may call this helper in
@@ -1489,11 +1492,11 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
  * successfully.
  */
 int dax_iomap_fault(struct vm_fault *vmf, enum page_entry_size pe_size,
-                   pfn_t *pfnp, const struct iomap_ops *ops)
+                   pfn_t *pfnp, int *iomap_errp, const struct iomap_ops *ops)
 {
        switch (pe_size) {
        case PE_SIZE_PTE:
-               return dax_iomap_pte_fault(vmf, pfnp, ops);
+               return dax_iomap_pte_fault(vmf, pfnp, iomap_errp, ops);
        case PE_SIZE_PMD:
                return dax_iomap_pmd_fault(vmf, pfnp, ops);
        default: