On Fri, Nov 08, 2024 at 07:42:43AM -0500, Brian Foster wrote: > iomap_iter_advance() zeroes the processed and mapping fields on > every non-error iteration except for the last expected iteration > (i.e. return 0 expected to terminate the iteration loop). This > appears to be circumstantial as nothing currently relies on these > fields after the final iteration. > > Therefore to better faciliate iomap_iter reuse in subsequent > patches, update iomap_iter_advance() to always reset per-iteration > state on successful completion. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> Seems pretty straightforward to me, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > fs/iomap/iter.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c > index 79a0614eaab7..3790918646af 100644 > --- a/fs/iomap/iter.c > +++ b/fs/iomap/iter.c > @@ -22,26 +22,25 @@ > static inline int iomap_iter_advance(struct iomap_iter *iter) > { > bool stale = iter->iomap.flags & IOMAP_F_STALE; > + int ret = 1; > > /* handle the previous iteration (if any) */ > if (iter->iomap.length) { > if (iter->processed < 0) > return iter->processed; > - if (!iter->processed && !stale) > - return 0; > if (WARN_ON_ONCE(iter->processed > iomap_length(iter))) > return -EIO; > iter->pos += iter->processed; > iter->len -= iter->processed; > - if (!iter->len) > - return 0; > + if (!iter->len || (!iter->processed && !stale)) > + ret = 0; > } > > - /* clear the state for the next iteration */ > + /* clear the per iteration state */ > iter->processed = 0; > memset(&iter->iomap, 0, sizeof(iter->iomap)); > memset(&iter->srcmap, 0, sizeof(iter->srcmap)); > - return 1; > + return ret; > } > > static inline void iomap_iter_done(struct iomap_iter *iter) > -- > 2.47.0 > >