mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
io_uring/timeout: don't end a linked timeout with 1
A linked timeout that fires cancels the request it is linked to, and completes with -ETIME if that worked out: ret = io_try_cancel(req->tctx, &cd, 0); ... io_req_set_res(req, ret ?: -ETIME, 0); io_try_cancel() returns 0 or an error, except for requests that are parked on ->futex_list or ->waitid_list. io_futex_cancel() and io_waitid_cancel() return the number of requests that they have cancelled, and io_try_cancel() hands it on. So the linked timeout of an IORING_OP_FUTEX_WAIT, IORING_OP_FUTEX_WAITV or IORING_OP_WAITID that it has cancelled completes with 1, each time. The waitid test of liburing checks for that 1, and has to be changed to expect -ETIME, which is what the linked timeout of any other request completes with. Fixes:f31ecf671d("io_uring: add IORING_OP_WAITID support") Fixes:194bb58c60("io_uring: add support for futex wake and wait") Assisted-by: LLM Signed-off-by: Josef Bacik <josef@toxicpanda.com> Link: https://patch.msgid.link/20261015-b4-io-uring-fixes-v1-42-c1556f5d7bf5@toxicpanda.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
b088ae34d4
commit
c74193430f
|
|
@ -393,6 +393,9 @@ static void io_req_task_link_timeout(struct io_tw_req tw_req, io_tw_token_t tw)
|
|||
};
|
||||
|
||||
ret = io_try_cancel(req->tctx, &cd, 0);
|
||||
/* a number of requests for futex and waitid */
|
||||
if (ret > 0)
|
||||
ret = 0;
|
||||
} else {
|
||||
ret = -ECANCELED;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user