Message ID | 20250219175050.83986-3-bfoster@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | iomap: incremental advance conversion -- phase 2 | expand |
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@redhat.com> Looks pretty straightforward, Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> --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 > >
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:
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@redhat.com> --- fs/iomap/direct-io.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-)