On Wed, Feb 19, 2025 at 02:33:44PM -0800, Darrick J. Wong wrote: > On Wed, Feb 19, 2025 at 12:50:42PM -0500, Brian Foster wrote: > > 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 <bfoster@xxxxxxxxxx> > > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > > Not sure why this and the next patch are split up but it's fsdax so meh. > Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> > Heh.. mainly just out of caution and bisectability. The subsequent patch took a bit of fighting for me to get right and this patch served as a nice baseline to isolate changes in the DAX I/O path from the functional iomap change, since this patch is relatively trivial. Thanks for the reviews.. Brian > --D > > > --- > > fs/dax.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/fs/dax.c b/fs/dax.c > > index 21b47402b3dc..296f5aa18640 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; > > -- > > 2.48.1 > > > > >