Commit cc8e9ba7 authored by Pavel Begunkov's avatar Pavel Begunkov Committed by Jens Axboe

io_uring: use completion batching for poll rem/upd

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: default avatarPavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/e2bdc6c5abd9e9b80f09b86d8823eb1c780362cd.1639605189.git.asml.silence@gmail.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent eb0089d6
...@@ -2778,7 +2778,7 @@ static bool __io_complete_rw_common(struct io_kiocb *req, long res) ...@@ -2778,7 +2778,7 @@ static bool __io_complete_rw_common(struct io_kiocb *req, long res)
return false; 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); unsigned int cflags = io_put_kbuf(req);
int res = req->result; int res = req->result;
...@@ -5903,6 +5903,7 @@ static int io_poll_update(struct io_kiocb *req, unsigned int issue_flags) ...@@ -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_ring_ctx *ctx = req->ctx;
struct io_kiocb *preq; struct io_kiocb *preq;
int ret2, ret = 0; int ret2, ret = 0;
bool locked;
spin_lock(&ctx->completion_lock); spin_lock(&ctx->completion_lock);
preq = io_poll_find(ctx, req->poll_update.old_user_data, true); 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) ...@@ -5928,13 +5929,16 @@ static int io_poll_update(struct io_kiocb *req, unsigned int issue_flags)
if (!ret2) if (!ret2)
goto out; goto out;
} }
req_set_fail(preq); 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: out:
if (ret < 0) if (ret < 0)
req_set_fail(req); req_set_fail(req);
/* complete update request, we're done with it */ /* complete update request, we're done with it */
io_req_complete(req, ret); __io_req_complete(req, issue_flags, ret, 0);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment