]> Git Repo - linux.git/commitdiff
io_uring: use completion batching for poll rem/upd
authorPavel Begunkov <[email protected]>
Wed, 15 Dec 2021 22:08:50 +0000 (22:08 +0000)
committerJens Axboe <[email protected]>
Tue, 28 Dec 2021 17:51:15 +0000 (09:51 -0800)
Use __io_req_complete() in io_poll_update(), so we can utilise
completion batching for both update/remove request and the poll
we're killing (if any).

Signed-off-by: Pavel Begunkov <[email protected]>
Link: https://lore.kernel.org/r/e2bdc6c5abd9e9b80f09b86d8823eb1c780362cd.1639605189.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <[email protected]>
fs/io_uring.c

index 206066b59b62392f348c39eec70aba7ff154e4c7..eda8739592d04429e1f9dbb489b4d0819df9d973 100644 (file)
@@ -2778,7 +2778,7 @@ static bool __io_complete_rw_common(struct io_kiocb *req, long res)
        return false;
 }
 
-static void io_req_task_complete(struct io_kiocb *req, bool *locked)
+static inline void io_req_task_complete(struct io_kiocb *req, bool *locked)
 {
        unsigned int cflags = io_put_kbuf(req);
        int res = req->result;
@@ -5903,6 +5903,7 @@ static int io_poll_update(struct io_kiocb *req, unsigned int issue_flags)
        struct io_ring_ctx *ctx = req->ctx;
        struct io_kiocb *preq;
        int ret2, ret = 0;
+       bool locked;
 
        spin_lock(&ctx->completion_lock);
        preq = io_poll_find(ctx, req->poll_update.old_user_data, true);
@@ -5928,13 +5929,16 @@ static int io_poll_update(struct io_kiocb *req, unsigned int issue_flags)
                if (!ret2)
                        goto out;
        }
+
        req_set_fail(preq);
-       io_req_complete(preq, -ECANCELED);
+       preq->result = -ECANCELED;
+       locked = !(issue_flags & IO_URING_F_UNLOCKED);
+       io_req_task_complete(preq, &locked);
 out:
        if (ret < 0)
                req_set_fail(req);
        /* complete update request, we're done with it */
-       io_req_complete(req, ret);
+       __io_req_complete(req, issue_flags, ret, 0);
        return 0;
 }
 
This page took 0.076435 seconds and 4 git commands to generate.