]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iomap: lift error code check out of iomap_iter_advance()
authorBrian Foster <bfoster@redhat.com>
Fri, 7 Feb 2025 14:32:47 +0000 (09:32 -0500)
committerChristian Brauner <brauner@kernel.org>
Mon, 10 Feb 2025 11:46:34 +0000 (12:46 +0100)
The error code is only used to check whether iomap_iter() should
terminate due to an error returned in iter.processed. Lift the check
out of iomap_iter_advance() in preparation to make it more generic.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Link: https://lore.kernel.org/r/20250207143253.314068-5-bfoster@redhat.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/iomap/iter.c

index a2ae99fe64316cb40293642a7c86efd9443f51fc..1db16be7b9f001ef85ab25d65cb3c83267aef14a 100644 (file)
@@ -30,8 +30,6 @@ static inline int iomap_iter_advance(struct iomap_iter *iter, s64 count)
        bool stale = iter->iomap.flags & IOMAP_F_STALE;
        int ret = 1;
 
-       if (count < 0)
-               return count;
        if (WARN_ON_ONCE(count > iomap_length(iter)))
                return -EIO;
        iter->pos += count;
@@ -71,6 +69,7 @@ static inline void iomap_iter_done(struct iomap_iter *iter)
  */
 int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
 {
+       s64 processed;
        int ret;
 
        trace_iomap_iter(iter, ops, _RET_IP_);
@@ -86,8 +85,14 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops)
                        return ret;
        }
 
+       processed = iter->processed;
+       if (processed < 0) {
+               iomap_iter_reset_iomap(iter);
+               return processed;
+       }
+
        /* advance and clear state from the previous iteration */
-       ret = iomap_iter_advance(iter, iter->processed);
+       ret = iomap_iter_advance(iter, processed);
        iomap_iter_reset_iomap(iter);
        if (ret <= 0)
                return ret;