]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
io_uring: rely on io_prep_reg_vec for iovec placement
authorPavel Begunkov <asml.silence@gmail.com>
Sat, 8 Mar 2025 18:21:16 +0000 (18:21 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 10 Mar 2025 13:14:27 +0000 (07:14 -0600)
All vectored reg buffer users should use io_import_reg_vec() for iovec
imports, since iovec placement is the function's responsibility and
callers shouldn't know much about it, drop the offset parameter from
io_prep_reg_vec() and calculate it inside.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/08ed87ca4bbc06724373b6ce06f36b703fe60c4e.1741457480.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/net.c
io_uring/rsrc.c
io_uring/rsrc.h
io_uring/rw.c

index 6b8dbadf445fbbce2e8caeef02ec7efc8c0c2441..1e36a72e4008d251f4cc62c78c60d1e409d748da 100644 (file)
@@ -1513,12 +1513,10 @@ int io_sendmsg_zc(struct io_kiocb *req, unsigned int issue_flags)
 
        if (req->flags & REQ_F_IMPORT_BUFFER) {
                unsigned uvec_segs = kmsg->msg.msg_iter.nr_segs;
-               unsigned iovec_off = kmsg->vec.nr - uvec_segs;
                int ret;
 
                ret = io_import_reg_vec(ITER_SOURCE, &kmsg->msg.msg_iter, req,
-                                       &kmsg->vec, uvec_segs, iovec_off,
-                                       issue_flags);
+                                       &kmsg->vec, uvec_segs, issue_flags);
                if (unlikely(ret))
                        return ret;
                kmsg->msg.sg_from_iter = io_sg_from_iter;
index 0e413e910f3d10ad5782a279c582d162cf378ab3..607b09bd8374462fa0f0b3958165f6f78cfb26e0 100644 (file)
@@ -1349,11 +1349,11 @@ static int io_estimate_bvec_size(struct iovec *iov, unsigned nr_iovs,
 
 int io_import_reg_vec(int ddir, struct iov_iter *iter,
                        struct io_kiocb *req, struct iou_vec *vec,
-                       unsigned nr_iovs, unsigned iovec_off,
-                       unsigned issue_flags)
+                       unsigned nr_iovs, unsigned issue_flags)
 {
        struct io_rsrc_node *node;
        struct io_mapped_ubuf *imu;
+       unsigned iovec_off;
        struct iovec *iov;
        unsigned nr_segs;
 
@@ -1366,6 +1366,7 @@ int io_import_reg_vec(int ddir, struct iov_iter *iter,
        if (!(imu->dir & (1 << ddir)))
                return -EFAULT;
 
+       iovec_off = vec->nr - nr_iovs;
        iov = vec->iovec + iovec_off;
        nr_segs = io_estimate_bvec_size(iov, nr_iovs, imu);
 
@@ -1377,8 +1378,7 @@ int io_import_reg_vec(int ddir, struct iov_iter *iter,
                nr_segs += nr_iovs;
        }
 
-       if (WARN_ON_ONCE(iovec_off + nr_iovs != vec->nr) ||
-           nr_segs > vec->nr) {
+       if (nr_segs > vec->nr) {
                struct iou_vec tmp_vec = {};
                int ret;
 
index 43f784915573ddcb9c4bfeb999d088e394817bcf..b52242852ff342806b6b93791d284222db3137f4 100644 (file)
@@ -65,8 +65,7 @@ int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter,
                        unsigned issue_flags);
 int io_import_reg_vec(int ddir, struct iov_iter *iter,
                        struct io_kiocb *req, struct iou_vec *vec,
-                       unsigned nr_iovs, unsigned iovec_off,
-                       unsigned issue_flags);
+                       unsigned nr_iovs, unsigned issue_flags);
 int io_prep_reg_iovec(struct io_kiocb *req, struct iou_vec *iv,
                        const struct iovec __user *uvec, size_t uvec_segs);
 
index 4861b876f48e358ff961d198d1b905f5cf52ef99..246b22225919fb141ec15b38049150fde53ec323 100644 (file)
@@ -390,11 +390,10 @@ static int io_rw_import_reg_vec(struct io_kiocb *req,
 {
        struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw);
        unsigned uvec_segs = rw->len;
-       unsigned iovec_off = io->vec.nr - uvec_segs;
        int ret;
 
        ret = io_import_reg_vec(ddir, &io->iter, req, &io->vec,
-                               uvec_segs, iovec_off, issue_flags);
+                               uvec_segs, issue_flags);
        if (unlikely(ret))
                return ret;
        iov_iter_save_state(&io->iter, &io->iter_state);