• yangerkun's avatar
    io_uring: consider the overflow of sequence for timeout req · 5da0fb1a
    yangerkun authored
    Now we recalculate the sequence of timeout with 'req->sequence =
    ctx->cached_sq_head + count - 1', judge the right place to insert
    for timeout_list by compare the number of request we still expected for
    completion. But we have not consider about the situation of overflow:
    
    1. ctx->cached_sq_head + count - 1 may overflow. And a bigger count for
    the new timeout req can have a small req->sequence.
    
    2. cached_sq_head of now may overflow compare with before req. And it
    will lead the timeout req with small req->sequence.
    
    This overflow will lead to the misorder of timeout_list, which can lead
    to the wrong order of the completion of timeout_list. Fix it by reuse
    req->submit.sequence to store the count, and change the logic of
    inserting sort in io_timeout.
    Signed-off-by: default avataryangerkun <yangerkun@huawei.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    5da0fb1a
io_uring.c 93.5 KB