With all in-tree filesystems implementing ->iomap_next(), drop the ->iomap_begin()/->iomap_end() path. Reviewed-by: Christoph Hellwig Reviewed-by: "Darrick J. Wong" Signed-off-by: Joanne Koong --- fs/iomap/direct-io.c | 47 ++++++++++++++----------------------------- fs/iomap/iter.c | 6 +----- include/linux/iomap.h | 6 ++---- 3 files changed, 18 insertions(+), 41 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index fcdae3ef6dd0..a47369e6b4e1 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -1001,18 +1001,13 @@ iomap_dio_simple_supported(struct kiocb *iocb, struct iov_iter *iter, } static inline void -iomap_dio_simple_finish(struct iomap_iter *iomi, const struct iomap_ops *ops, - size_t len, size_t written) +iomap_dio_simple_finish(struct iomap_iter *iomi, iomap_iter_next_fn next, + size_t written) { - if (ops->iomap_next) { - iomi->iter_start_pos = iomi->pos; - iomi->pos += written; - iomi->len -= written; - ops->iomap_next(iomi, &iomi->iomap, &iomi->srcmap); - } else if (ops->iomap_end) { - ops->iomap_end(iomi->inode, iomi->pos, len, written, - iomi->flags, &iomi->iomap); - } + iomi->iter_start_pos = iomi->pos; + iomi->pos += written; + iomi->len -= written; + next(iomi, &iomi->iomap, &iomi->srcmap); } /* @@ -1079,25 +1074,13 @@ iomap_dio_simple(struct kiocb *iocb, struct iov_iter *iter, inode_dio_begin(inode); - if (ops->iomap_next) { - ret = ops->iomap_next(&iomi, &iomi.iomap, &iomi.srcmap); - if (ret <= 0) { - inode_dio_end(inode); - /* - * the first iteration must yield a mapping (>0) or an - * error - */ - if (WARN_ON_ONCE(!ret)) - return -EFAULT; - return ret; - } - } else { - ret = ops->iomap_begin(inode, iomi.pos, count, iomi.flags, - &iomi.iomap, &iomi.srcmap); - if (ret) { - inode_dio_end(inode); - return ret; - } + ret = ops->iomap_next(&iomi, &iomi.iomap, &iomi.srcmap); + if (ret <= 0) { + inode_dio_end(inode); + /* the first iteration must yield a mapping (>0) or an error */ + if (WARN_ON_ONCE(!ret)) + return -EFAULT; + return ret; } if (iomi.iomap.type != IOMAP_MAPPED || @@ -1163,7 +1146,7 @@ iomap_dio_simple(struct kiocb *iocb, struct iov_iter *iter, * iomap_next() call on the hot read path. */ if (!(dio_flags & IOMAP_DIO_NO_IOMAP_END)) - iomap_dio_simple_finish(&iomi, ops, count, count); + iomap_dio_simple_finish(&iomi, ops->iomap_next, count); if (!wait_for_completion) { bio->bi_end_io = iomap_dio_simple_end_io; @@ -1181,7 +1164,7 @@ iomap_dio_simple(struct kiocb *iocb, struct iov_iter *iter, bio_put(bio); out_iomap_end: if (!(dio_flags & IOMAP_DIO_NO_IOMAP_END)) - iomap_dio_simple_finish(&iomi, ops, count, 0); + iomap_dio_simple_finish(&iomi, ops->iomap_next, 0); inode_dio_end(inode); return ret; } diff --git a/fs/iomap/iter.c b/fs/iomap/iter.c index e05574602946..f7c4d5cf56be 100644 --- a/fs/iomap/iter.c +++ b/fs/iomap/iter.c @@ -107,11 +107,7 @@ int iomap_iter(struct iomap_iter *iter, const struct iomap_ops *ops) trace_iomap_iter(iter, ops, _RET_IP_); - if (ops->iomap_next) - ret = ops->iomap_next(iter, &iter->iomap, &iter->srcmap); - else - ret = iomap_iter_next(iter, &iter->iomap, &iter->srcmap, - ops->iomap_begin, ops->iomap_end); + ret = ops->iomap_next(iter, &iter->iomap, &iter->srcmap); iter->status = 0; if (ret > 0) diff --git a/include/linux/iomap.h b/include/linux/iomap.h index 8662bd528e9e..66e2f7186299 100644 --- a/include/linux/iomap.h +++ b/include/linux/iomap.h @@ -194,7 +194,7 @@ struct iomap_write_ops { }; /* - * Flags for iomap_begin / iomap_end. No flag implies a read. + * Flags for iomap_next. No flag implies a read. */ #define IOMAP_WRITE (1 << 0) /* writing, must allocate blocks */ #define IOMAP_ZERO (1 << 1) /* zeroing operation, may skip holes */ @@ -239,8 +239,6 @@ typedef int (*iomap_iter_next_fn)(const struct iomap_iter *iter, struct iomap *iomap, struct iomap *srcmap); struct iomap_ops { - iomap_iter_begin_fn iomap_begin; - iomap_iter_end_fn iomap_end; iomap_iter_next_fn iomap_next; }; @@ -255,7 +253,7 @@ struct iomap_ops { * incremental iter advance. * @status: Status of the most recent iteration. Zero on success or a negative * errno on error. - * @flags: Zero or more of the iomap_begin flags above. + * @flags: Zero or more of the iomap_next flags above. * @iomap: Map describing the I/O iteration * @srcmap: Source map for COW operations */ -- 2.52.0