]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring/net: don't use io_do_buffer_select at prep
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 31 Mar 2025 16:17:59 +0000 (17:17 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 21 Apr 2025 11:06:58 +0000 (05:06 -0600)
Prep code is interested whether it's a selected buffer request, not
whether a buffer has already been selected like what
io_do_buffer_select() returns. Check for REQ_F_BUFFER_SELECT directly.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/4488a029ac698554bebf732263fe19d7734affa6.1743437358.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/net.c

index 24040bc3916a1bebf33f7da891bfe85d5abfa0e7..b9a03aeda4bbc2f26dad187aca0f56f7702e9bea 100644 (file)
@@ -361,13 +361,9 @@ static int io_send_setup(struct io_kiocb *req, const struct io_uring_sqe *sqe)
        }
        if (sr->flags & IORING_RECVSEND_FIXED_BUF)
                return 0;
-       if (!io_do_buffer_select(req)) {
-               ret = import_ubuf(ITER_SOURCE, sr->buf, sr->len,
-                                 &kmsg->msg.msg_iter);
-               if (unlikely(ret < 0))
-                       return ret;
-       }
-       return 0;
+       if (req->flags & REQ_F_BUFFER_SELECT)
+               return 0;
+       return import_ubuf(ITER_SOURCE, sr->buf, sr->len, &kmsg->msg.msg_iter);
 }
 
 static int io_sendmsg_setup(struct io_kiocb *req, const struct io_uring_sqe *sqe)
@@ -723,7 +719,6 @@ static int io_recvmsg_prep_setup(struct io_kiocb *req)
 {
        struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg);
        struct io_async_msghdr *kmsg;
-       int ret;
 
        kmsg = io_msg_alloc_async(req);
        if (unlikely(!kmsg))
@@ -739,13 +734,10 @@ static int io_recvmsg_prep_setup(struct io_kiocb *req)
                kmsg->msg.msg_iocb = NULL;
                kmsg->msg.msg_ubuf = NULL;
 
-               if (!io_do_buffer_select(req)) {
-                       ret = import_ubuf(ITER_DEST, sr->buf, sr->len,
-                                         &kmsg->msg.msg_iter);
-                       if (unlikely(ret))
-                               return ret;
-               }
-               return 0;
+               if (req->flags & REQ_F_BUFFER_SELECT)
+                       return 0;
+               return import_ubuf(ITER_DEST, sr->buf, sr->len,
+                                  &kmsg->msg.msg_iter);
        }
 
        return io_recvmsg_copy_hdr(req, kmsg);