From: Brian Foster Date: Mon, 24 Feb 2025 14:47:49 +0000 (-0500) Subject: dax: advance the iomap_iter in the read/write path X-Git-Tag: v6.15-rc1~249^2~4^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1e6bae60732d1aea4f583a23794306a952bb76d;p=thirdparty%2Fkernel%2Flinux.git 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: Brian Foster Link: https://lore.kernel.org/r/20250224144757.237706-5-bfoster@redhat.com Reviewed-by: Christoph Hellwig Reviewed-by: "Darrick J. Wong" Signed-off-by: Christian Brauner --- diff --git a/fs/dax.c b/fs/dax.c index 21b47402b3dca..296f5aa186401 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -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;