dax: advance the iomap_iter on unshare range
authorBrian Foster <bfoster@redhat.com>
Mon, 24 Feb 2025 14:47:52 +0000 (09:47 -0500)
committerChristian Brauner <brauner@kernel.org>
Wed, 26 Feb 2025 08:42:36 +0000 (09:42 +0100)
Advance the iter and return 0 or an error code for success or
failure.

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

index f4d8c8c1008675f59d24e4efcfcd44ee311686a9..c0fbab8c66f77206dd445b1a8607249fcc1e3439 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1266,11 +1266,11 @@ static s64 dax_unshare_iter(struct iomap_iter *iter)
        u64 copy_len = iomap_length(iter);
        u32 mod;
        int id = 0;
-       s64 ret = 0;
+       s64 ret = iomap_length(iter);
        void *daddr = NULL, *saddr = NULL;
 
        if (!iomap_want_unshare_iter(iter))
-               return iomap_length(iter);
+               return iomap_iter_advance(iter, &ret);
 
        /*
         * Extend the file range to be aligned to fsblock/pagesize, because
@@ -1307,7 +1307,9 @@ static s64 dax_unshare_iter(struct iomap_iter *iter)
 
 out_unlock:
        dax_read_unlock(id);
-       return dax_mem2blk_err(ret);
+       if (ret < 0)
+               return dax_mem2blk_err(ret);
+       return iomap_iter_advance(iter, &ret);
 }
 
 int dax_file_unshare(struct inode *inode, loff_t pos, loff_t len,