mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
io_uring: cleanup io_poll_remove_one() logic
We only need apoll in the one section, do the juggling with the work restoration there. This removes a special case further down as well. No functional changes in this patch. Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
6a4d07cde5
commit
3bfa5bcb26
@ -4470,33 +4470,32 @@ static bool __io_poll_remove_one(struct io_kiocb *req,
|
||||
do_complete = true;
|
||||
}
|
||||
spin_unlock(&poll->head->lock);
|
||||
hash_del(&req->hash_node);
|
||||
return do_complete;
|
||||
}
|
||||
|
||||
static bool io_poll_remove_one(struct io_kiocb *req)
|
||||
{
|
||||
struct async_poll *apoll = NULL;
|
||||
bool do_complete;
|
||||
|
||||
if (req->opcode == IORING_OP_POLL_ADD) {
|
||||
io_poll_remove_double(req);
|
||||
do_complete = __io_poll_remove_one(req, &req->poll);
|
||||
} else {
|
||||
apoll = req->apoll;
|
||||
struct async_poll *apoll = req->apoll;
|
||||
|
||||
/* non-poll requests have submit ref still */
|
||||
do_complete = __io_poll_remove_one(req, &req->apoll->poll);
|
||||
if (do_complete)
|
||||
do_complete = __io_poll_remove_one(req, &apoll->poll);
|
||||
if (do_complete) {
|
||||
io_put_req(req);
|
||||
}
|
||||
|
||||
hash_del(&req->hash_node);
|
||||
|
||||
if (do_complete && apoll) {
|
||||
/*
|
||||
* restore ->work because we need to call io_req_work_drop_env.
|
||||
*/
|
||||
memcpy(&req->work, &apoll->work, sizeof(req->work));
|
||||
kfree(apoll);
|
||||
/*
|
||||
* restore ->work because we will call
|
||||
* io_req_work_drop_env below when dropping the
|
||||
* final reference.
|
||||
*/
|
||||
memcpy(&req->work, &apoll->work, sizeof(req->work));
|
||||
kfree(apoll);
|
||||
}
|
||||
}
|
||||
|
||||
if (do_complete) {
|
||||
|
Loading…
Reference in New Issue
Block a user