Message ID | e6516c3304eb654ec234cfa65c88a9579861e597.1736015288.git.asml.silence@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/1] io_uring/timeout: fix multishot updates | expand |
On 1/4/25 11:29 AM, Pavel Begunkov wrote: > After update only the first shot of a multishot timeout request adheres > to the new timeout value while all subsequent retries continue to use > the old value. Don't forget to update the timeout stored in struct > io_timeout_data. Nice find! Do we have a test case that can go into liburing for this too?
On Sat, 04 Jan 2025 18:29:02 +0000, Pavel Begunkov wrote: > After update only the first shot of a multishot timeout request adheres > to the new timeout value while all subsequent retries continue to use > the old value. Don't forget to update the timeout stored in struct > io_timeout_data. > > Applied, thanks! [1/1] io_uring/timeout: fix multishot updates commit: c83c846231db8b153bfcb44d552d373c34f78245 Best regards,
On 1/4/25 18:39, Jens Axboe wrote: > On 1/4/25 11:29 AM, Pavel Begunkov wrote: >> After update only the first shot of a multishot timeout request adheres >> to the new timeout value while all subsequent retries continue to use >> the old value. Don't forget to update the timeout stored in struct >> io_timeout_data. > > Nice find! > > Do we have a test case that can go into liburing for this too? Christian has a patch, I assume he's going to send it https://github.com/axboe/liburing/issues/1316 https://github.com/axboe/liburing/commit/3a5919aef666bdf0202c76918dbb85f1a6db9a32
On 1/4/25 1:44 PM, Pavel Begunkov wrote: > On 1/4/25 18:39, Jens Axboe wrote: >> On 1/4/25 11:29 AM, Pavel Begunkov wrote: >>> After update only the first shot of a multishot timeout request adheres >>> to the new timeout value while all subsequent retries continue to use >>> the old value. Don't forget to update the timeout stored in struct >>> io_timeout_data. >> >> Nice find! >> >> Do we have a test case that can go into liburing for this too? > > Christian has a patch, I assume he's going to send it > > https://github.com/axboe/liburing/issues/1316 > https://github.com/axboe/liburing/commit/3a5919aef666bdf0202c76918dbb85f1a6db9a32 Perfect.
diff --git a/io_uring/timeout.c b/io_uring/timeout.c index f55e25338b23..dd719e3ca870 100644 --- a/io_uring/timeout.c +++ b/io_uring/timeout.c @@ -410,10 +410,12 @@ static int io_timeout_update(struct io_ring_ctx *ctx, __u64 user_data, timeout->off = 0; /* noseq */ data = req->async_data; + data->ts = *ts; + list_add_tail(&timeout->list, &ctx->timeout_list); hrtimer_init(&data->timer, io_timeout_get_clock(data), mode); data->timer.function = io_timeout_fn; - hrtimer_start(&data->timer, timespec64_to_ktime(*ts), mode); + hrtimer_start(&data->timer, timespec64_to_ktime(data->ts), mode); return 0; }
After update only the first shot of a multishot timeout request adheres to the new timeout value while all subsequent retries continue to use the old value. Don't forget to update the timeout stored in struct io_timeout_data. Cc: stable@vger.kernel.org Fixes: ea97f6c8558e8 ("io_uring: add support for multishot timeouts") Reported-by: Christian Mazakas <christian.mazakas@gmail.com> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> --- io_uring/timeout.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)