Unverified Commit e1e6bae6 authored by Brian Foster's avatar Brian Foster Committed by Christian Brauner
Browse files

dax: advance the iomap_iter in the read/write path



DAX reads and writes flow through dax_iomap_iter(), which has one or
more subtleties in terms of how it processes a range vs. what is
specified in the iomap_iter. To keep things simple and remove the
dependency on iomap_iter() advances, convert a positive return from
dax_iomap_iter() to the new advance and status return semantics. The
advance can be pushed further down in future patches.

Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
Link: https://lore.kernel.org/r/20250224144757.237706-5-bfoster@redhat.com


Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent f145377d
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1585,8 +1585,12 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
	if (iocb->ki_flags & IOCB_NOWAIT)
		iomi.flags |= IOMAP_NOWAIT;

	while ((ret = iomap_iter(&iomi, ops)) > 0)
	while ((ret = iomap_iter(&iomi, ops)) > 0) {
		iomi.processed = dax_iomap_iter(&iomi, iter);
		if (iomi.processed > 0)
			iomi.processed = iomap_iter_advance(&iomi,
							    &iomi.processed);
	}

	done = iomi.pos - iocb->ki_pos;
	iocb->ki_pos = iomi.pos;