On Wed, Feb 19, 2025 at 12:50:40PM -0500, Brian Foster wrote: > Update iomap direct I/O to advance the iter directly rather than via > iter.processed. Update each mapping type helper to advance based on > the amount of data processed and return success or failure. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> Looks pretty straightforward, Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > fs/iomap/direct-io.c | 22 +++++++++------------- > 1 file changed, 9 insertions(+), 13 deletions(-) > > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > index b521eb15759e..b3599f8d12ac 100644 > --- a/fs/iomap/direct-io.c > +++ b/fs/iomap/direct-io.c > @@ -289,8 +289,7 @@ static inline blk_opf_t iomap_dio_bio_opflags(struct iomap_dio *dio, > return opflags; > } > > -static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, > - struct iomap_dio *dio) > +static int iomap_dio_bio_iter(struct iomap_iter *iter, struct iomap_dio *dio) > { > const struct iomap *iomap = &iter->iomap; > struct inode *inode = iter->inode; > @@ -303,7 +302,7 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, > bool need_zeroout = false; > bool use_fua = false; > int nr_pages, ret = 0; > - size_t copied = 0; > + u64 copied = 0; > size_t orig_count; > > if (atomic && length != fs_block_size) > @@ -467,30 +466,28 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter, > /* Undo iter limitation to current extent */ > iov_iter_reexpand(dio->submit.iter, orig_count - copied); > if (copied) > - return copied; > + return iomap_iter_advance(iter, &copied); > return ret; > } > > -static loff_t iomap_dio_hole_iter(const struct iomap_iter *iter, > - struct iomap_dio *dio) > +static int iomap_dio_hole_iter(struct iomap_iter *iter, struct iomap_dio *dio) > { > loff_t length = iov_iter_zero(iomap_length(iter), dio->submit.iter); > > dio->size += length; > if (!length) > return -EFAULT; > - return length; > + return iomap_iter_advance(iter, &length); > } > > -static loff_t iomap_dio_inline_iter(const struct iomap_iter *iomi, > - struct iomap_dio *dio) > +static int iomap_dio_inline_iter(struct iomap_iter *iomi, struct iomap_dio *dio) > { > const struct iomap *iomap = &iomi->iomap; > struct iov_iter *iter = dio->submit.iter; > void *inline_data = iomap_inline_data(iomap, iomi->pos); > loff_t length = iomap_length(iomi); > loff_t pos = iomi->pos; > - size_t copied; > + u64 copied; > > if (WARN_ON_ONCE(!iomap_inline_data_valid(iomap))) > return -EIO; > @@ -512,11 +509,10 @@ static loff_t iomap_dio_inline_iter(const struct iomap_iter *iomi, > dio->size += copied; > if (!copied) > return -EFAULT; > - return copied; > + return iomap_iter_advance(iomi, &copied); > } > > -static loff_t iomap_dio_iter(const struct iomap_iter *iter, > - struct iomap_dio *dio) > +static int iomap_dio_iter(struct iomap_iter *iter, struct iomap_dio *dio) > { > switch (iter->iomap.type) { > case IOMAP_HOLE: > -- > 2.48.1 > >