diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2024-03-08 14:55:58 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2024-03-08 15:59:20 +0100 |
commit | 1af04699c59713a7693cc63d80b29152579e61c3 (patch) | |
tree | ee7f3cd9f3470be65a478c97788cbee955096a20 /io_uring/net.c | |
parent | io_uring: refactor DEFER_TASKRUN multishot checks (diff) | |
download | linux-1af04699c59713a7693cc63d80b29152579e61c3.tar.xz linux-1af04699c59713a7693cc63d80b29152579e61c3.zip |
io_uring/net: dedup io_recv_finish req completion
There are two block in io_recv_finish() completing the request, which we
can combine and remove jumping.
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/0e338dcb33c88de83809fda021cba9e7c9681620.1709905727.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to '')
-rw-r--r-- | io_uring/net.c | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/io_uring/net.c b/io_uring/net.c index 86ec26a58bb0..2892236fb021 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -694,20 +694,12 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, if (msg->msg_inq > 0) cflags |= IORING_CQE_F_SOCK_NONEMPTY; - if (!(req->flags & REQ_F_APOLL_MULTISHOT)) { - io_req_set_res(req, *ret, cflags); - *ret = IOU_OK; - return true; - } - - if (mshot_finished) - goto finish; - /* * Fill CQE for this receive and see if we should keep trying to * receive from this socket. */ - if (io_fill_cqe_req_aux(req, issue_flags & IO_URING_F_COMPLETE_DEFER, + if ((req->flags & REQ_F_APOLL_MULTISHOT) && !mshot_finished && + io_fill_cqe_req_aux(req, issue_flags & IO_URING_F_COMPLETE_DEFER, *ret, cflags | IORING_CQE_F_MORE)) { struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); int mshot_retry_ret = IOU_ISSUE_SKIP_COMPLETE; @@ -727,8 +719,8 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, *ret = -EAGAIN; return true; } - /* Otherwise stop multishot but use the current result. */ -finish: + + /* Finish the request / stop multishot. */ io_req_set_res(req, *ret, cflags); if (issue_flags & IO_URING_F_MULTISHOT) |