]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
io_uring: io_accept() should hold on to submit reference on retry
authorJens Axboe <axboe@kernel.dk>
Thu, 20 Feb 2020 16:59:02 +0000 (09:59 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 2 Mar 2020 21:04:24 +0000 (14:04 -0700)
Don't drop an early reference, hang on to it and let the caller drop
it. This makes it behave more like "regular" requests.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 64b4519aabf8df4d543d70337cbf4fb865edb184..2bf954a42586b327fcb89bb89374ff7605c5f226 100644 (file)
@@ -3354,6 +3354,8 @@ static void io_accept_finish(struct io_wq_work **workptr)
        struct io_kiocb *req = container_of(*workptr, struct io_kiocb, work);
        struct io_kiocb *nxt = NULL;
 
+       io_put_req(req);
+
        if (io_req_cancelled(req))
                return;
        __io_accept(req, &nxt, false);
@@ -3371,7 +3373,6 @@ static int io_accept(struct io_kiocb *req, struct io_kiocb **nxt,
        ret = __io_accept(req, nxt, force_nonblock);
        if (ret == -EAGAIN && force_nonblock) {
                req->work.func = io_accept_finish;
-               io_put_req(req);
                return -EAGAIN;
        }
        return 0;