io_uring/timeout: splice timed out link in timeout handler

A previous commit deferred this to the task_work part of it, so it could
be protected by ->uring_lock. But that's actually not necessary here,
and in fact the head clearing is not enough to make that safe. For those
two reasons, just re-instate the local splicing.

Fixes: 49ae66eb8c ("io_uring: defer linked-timeout chain splice out of hrtimer context")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
master
Jens Axboe 2026-05-20 10:02:58 -06:00
parent cf18e36455
commit 3d879647fb
1 changed files with 3 additions and 1 deletions

View File

@ -417,9 +417,11 @@ static enum hrtimer_restart io_link_timeout_fn(struct hrtimer *timer)
* done in io_req_task_link_timeout(), if needed.
*/
if (prev) {
if (!req_ref_inc_not_zero(prev))
if (!req_ref_inc_not_zero(prev)) {
io_remove_next_linked(prev);
prev = NULL;
}
}
list_del(&timeout->list);
timeout->prev = prev;
raw_spin_unlock_irqrestore(&ctx->timeout_lock, flags);