• Y
    io_uring: consider the overflow of sequence for timeout req · 2ab45c71
    yangerkun 提交于
    commit 5da0fb1ab34ccfe6d49210b4f5a739c59fcbf25e upstream.
    
    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: Nyangerkun <yangerkun@huawei.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    Signed-off-by: NJoseph Qi <joseph.qi@linux.alibaba.com>
    Reviewed-by: NXiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
    2ab45c71
io_uring.c 94.5 KB