dax: advance the iomap_iter on pte and pmd faults
authorBrian Foster <bfoster@redhat.com>
Mon, 24 Feb 2025 14:47:54 +0000 (09:47 -0500)
committerChristian Brauner <brauner@kernel.org>
Wed, 26 Feb 2025 08:42:36 +0000 (09:42 +0100)
Advance the iomap_iter on PTE and PMD faults. Each of these
operations assign a hardcoded size to iter.processed. Replace those
with an advance and status return.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Link: https://lore.kernel.org/r/20250224144757.237706-10-bfoster@redhat.com
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/dax.c

index c8c0d81122abdcf75c43cec1efc3eb16e04a96d3..44701865ca94e03f8e1a0220d4ef9f0ec674b131 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1771,8 +1771,10 @@ static vm_fault_t dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
                        ret |= VM_FAULT_MAJOR;
                }
 
-               if (!(ret & VM_FAULT_ERROR))
-                       iter.processed = PAGE_SIZE;
+               if (!(ret & VM_FAULT_ERROR)) {
+                       u64 length = PAGE_SIZE;
+                       iter.processed = iomap_iter_advance(&iter, &length);
+               }
        }
 
        if (iomap_errp)
@@ -1885,8 +1887,10 @@ static vm_fault_t dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
                        continue; /* actually breaks out of the loop */
 
                ret = dax_fault_iter(vmf, &iter, pfnp, &xas, &entry, true);
-               if (ret != VM_FAULT_FALLBACK)
-                       iter.processed = PMD_SIZE;
+               if (ret != VM_FAULT_FALLBACK) {
+                       u64 length = PMD_SIZE;
+                       iter.processed = iomap_iter_advance(&iter, &length);
+               }
        }
 
 unlock_entry: