io_uring: remove ctx referencing from complete_post
Now completions are done from task context, that means that it's either the task itself, task_work or io-wq worker. In all those cases the ctx will be staying alive by mutexing, explicit referencing or req references by iowq. Remove extra ctx pinning from io_req_complete_post(). Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/60a0e96434c16ab4fe587651448290d61ec9a113.1631703756.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
83f84356bc
commit
a3f349071e
|
@ -1809,17 +1809,11 @@ static void io_req_complete_post(struct io_kiocb *req, long res,
|
|||
io_put_task(req->task, 1);
|
||||
list_add(&req->inflight_entry, &ctx->locked_free_list);
|
||||
ctx->locked_free_nr++;
|
||||
} else {
|
||||
if (!percpu_ref_tryget(&ctx->refs))
|
||||
req = NULL;
|
||||
percpu_ref_put(&ctx->refs);
|
||||
}
|
||||
io_commit_cqring(ctx);
|
||||
spin_unlock(&ctx->completion_lock);
|
||||
|
||||
if (req) {
|
||||
io_cqring_ev_posted(ctx);
|
||||
percpu_ref_put(&ctx->refs);
|
||||
}
|
||||
io_cqring_ev_posted(ctx);
|
||||
}
|
||||
|
||||
static inline bool io_req_needs_clean(struct io_kiocb *req)
|
||||
|
|
Loading…
Reference in New Issue