]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring/net: canonise accept mshot handling
authorPavel Begunkov <asml.silence@gmail.com>
Sun, 23 Feb 2025 17:22:30 +0000 (17:22 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 24 Feb 2025 19:11:06 +0000 (12:11 -0700)
Use a more recognisable pattern for mshot accept, first try to post an
mshot cqe if needed and after do terminating handling.

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

index 926cdb8d3350c1eea13fcf588047ba8689e3cfea..8283a1f55192fe08fea4599169e167ef947a871f 100644 (file)
@@ -1612,7 +1612,6 @@ retry:
                }
                if (ret == -ERESTARTSYS)
                        ret = -EINTR;
-               req_set_fail(req);
        } else if (!fixed) {
                fd_install(fd, file);
                ret = fd;
@@ -1625,14 +1624,8 @@ retry:
        if (!arg.is_empty)
                cflags |= IORING_CQE_F_SOCK_NONEMPTY;
 
-       if (!(req->flags & REQ_F_APOLL_MULTISHOT)) {
-               io_req_set_res(req, ret, cflags);
-               return IOU_OK;
-       }
-
-       if (ret < 0)
-               return ret;
-       if (io_req_post_cqe(req, ret, cflags | IORING_CQE_F_MORE)) {
+       if (ret >= 0 && (req->flags & REQ_F_APOLL_MULTISHOT) &&
+           io_req_post_cqe(req, ret, cflags | IORING_CQE_F_MORE)) {
                if (cflags & IORING_CQE_F_SOCK_NONEMPTY || arg.is_empty == -1)
                        goto retry;
                if (issue_flags & IO_URING_F_MULTISHOT)
@@ -1641,6 +1634,8 @@ retry:
        }
 
        io_req_set_res(req, ret, cflags);
+       if (ret < 0)
+               req_set_fail(req);
        if (!(issue_flags & IO_URING_F_MULTISHOT))
                return IOU_OK;
        return IOU_STOP_MULTISHOT;