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@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> Looks good now, Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --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 > >