io_uring: reliably cancel linked timeouts
Linked timeouts are fired asynchronously (i.e. soft-irq), and use generic cancellation paths to do its stuff, including poking into io-wq. The problem is that it's racy to access tctx->io_wq, as io_uring_task_cancel() and others may be happening at this exact moment. Mark linked timeouts with REQ_F_INLIFGHT for now, making sure there are no timeouts before io-wq destraction. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
b05a1bcd40
commit
dd59a3d595
|
@ -5500,6 +5500,7 @@ static int io_timeout_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe,
|
||||||
|
|
||||||
data->mode = io_translate_timeout_mode(flags);
|
data->mode = io_translate_timeout_mode(flags);
|
||||||
hrtimer_init(&data->timer, CLOCK_MONOTONIC, data->mode);
|
hrtimer_init(&data->timer, CLOCK_MONOTONIC, data->mode);
|
||||||
|
io_req_track_inflight(req);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue