• P
    io_uring: don't forget to task-cancel drained reqs · ef9865a4
    Pavel Begunkov 提交于
    If there is a long-standing request of one task locking up execution of
    deferred requests, and the defer list contains requests of another task
    (all files-less), then a potential execution of __io_uring_task_cancel()
    by that another task will sleep until that first long-standing request
    completion, and that may take long.
    
    E.g.
    tsk1: req1/read(empty_pipe) -> tsk2: req(DRAIN)
    Then __io_uring_task_cancel(tsk2) waits for req1 completion.
    
    It seems we even can manufacture a complicated case with many tasks
    sharing many rings that can lock them forever.
    
    Cancel deferred requests for __io_uring_task_cancel() as well.
    Signed-off-by: NPavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    ef9865a4
io_uring.c 234.7 KB