• Jens Axboe's avatar
    io_uring: ensure finish_wait() is always called in __io_uring_task_cancel() · a8d13dbc
    Jens Axboe authored
    If we enter with requests pending and performm cancelations, we'll have
    a different inflight count before and after calling prepare_to_wait().
    This causes the loop to restart. If we actually ended up canceling
    everything, or everything completed in-between, then we'll break out
    of the loop without calling finish_wait() on the waitqueue. This can
    trigger a warning on exit_signals(), as we leave the task state in
    TASK_UNINTERRUPTIBLE.
    
    Put a finish_wait() after the loop to catch that case.
    
    Cc: stable@vger.kernel.org # 5.9+
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    a8d13dbc
io_uring.c 244 KB