Re: [PATCH v5 04/10] iomap: lift error code check out of iomap_iter_advance()

Darrick J. Wong
2025-02-05T18:51:10Z

On Wed, Feb 05, 2025 at 08:58:15AM -0500, Brian Foster wrote:
> 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>
> Reviewed-by: Christoph Hellwig <hch@lst.de>

Looks good now,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
> fs/iomap/iter.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c
> index a2ae99fe6431..1db16be7b9f0 100644
> --- a/fs/iomap/iter.c
> +++ b/fs/iomap/iter.c
> @@ -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;
> --
> 2.48.1
>
>