Message ID | 20250205135821.178256-5-bfoster@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | iomap: incremental per-operation iter advance | expand |
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 > >
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;