Re: [PATCH] io_uring: flush timeouts that should already have expired

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 18/12/2020 16:24, Marcelo Diop-Gonzalez wrote:
> Right now io_flush_timeouts() checks if the current number of events
> is equal to ->timeout.target_seq, but this will miss some timeouts if
> there have been more than 1 event added since the last time they were
> flushed (possible in io_submit_flush_completions(), for example). The
> test below hangs before this change (unless you run with
> $ ./a.out ~/somefile 1)
> 
[...]
> 
> Signed-off-by: Marcelo Diop-Gonzalez <marcelo827@xxxxxxxxx>
> ---
>  fs/io_uring.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/io_uring.c b/fs/io_uring.c
> index b74957856e68..ae7244f8e842 100644
> --- a/fs/io_uring.c
> +++ b/fs/io_uring.c
> @@ -1639,7 +1639,7 @@ static void io_flush_timeouts(struct io_ring_ctx *ctx)
>  
>  		if (io_is_timeout_noseq(req))
>  			break;
> -		if (req->timeout.target_seq != ctx->cached_cq_tail
> +		if (req->timeout.target_seq > ctx->cached_cq_tail

There was an pretty old patch for probably that problem, which got
lost... Please consider that target_seq and others are u32 and may
easily overflow, you can't do comparisons as freely. It would be
great to finally fix it, but that can be a bit harder to do.

>  					- atomic_read(&ctx->cq_timeouts))
>  			break;
>  
> 

-- 
Pavel Begunkov



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux