iomap: lift iter termination logic from iomap_iter_advance()
authorBrian Foster <bfoster@redhat.com>
Fri, 7 Feb 2025 14:32:48 +0000 (09:32 -0500)
committerChristian Brauner <brauner@kernel.org>
Mon, 10 Feb 2025 11:46:34 +0000 (12:46 +0100)
commitb26f2ea1cd068b0b902e3bb735d05398d8c05aba
tree2af1c9944ada32431ef1f749cc040b67750e1cb6
parent9183b2a0e439ffa7ba2e176416efc4ffa21406d8
iomap: lift iter termination logic from iomap_iter_advance()

The iter termination logic in iomap_iter_advance() is only needed by
iomap_iter() to determine whether to proceed with the next mapping
for an ongoing operation. The old logic sets ret to 1 and then
terminates if the operation is complete (iter->len == 0) or the
previous iteration performed no work and the mapping has not been
marked stale. The stale check exists to allow operations to
retry the current mapping if an inconsistency has been detected.

To further genericize iomap_iter_advance(), lift the termination
logic into iomap_iter() and update the former to return success (0)
or an error code. iomap_iter() continues on successful advance and
non-zero iter->len or otherwise terminates in the no progress (and
not stale) or error cases.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Link: https://lore.kernel.org/r/20250207143253.314068-6-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