• Pavel Begunkov's avatar
    io_uring: fix racy REQ_F_LINK_TIMEOUT clearing · 900fad45
    Pavel Begunkov authored
    io_link_timeout_fn() removes REQ_F_LINK_TIMEOUT from the link head's
    flags, it's not atomic and may race with what the head is doing.
    
    If io_link_timeout_fn() doesn't clear the flag, as forced by this patch,
    then it may happen that for "req -> link_timeout1 -> link_timeout2",
    __io_kill_linked_timeout() would find link_timeout2 and try to cancel
    it, so miscounting references. Teach it to ignore such double timeouts
    by marking the active one with a new flag in io_prep_linked_timeout().
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    900fad45
io_uring.c 234 KB