• J
    io_uring: fix an issue when IOSQE_IO_LINK is inserted into defer list · 340538dc
    Jackie Liu 提交于
    commit a982eeb09b6030e567b8b815277c8c9197168040 upstream.
    
    This patch may fix two issues:
    
    First, when IOSQE_IO_DRAIN set, the next IOs need to be inserted into
    defer list to delay execution, but link io will be actively scheduled to
    run by calling io_queue_sqe.
    
    Second, when multiple LINK_IOs are inserted together with defer_list,
    the LINK_IO is no longer keep order.
    
       |-------------|
       |   LINK_IO   |      ----> insert to defer_list  -----------
       |-------------|                                            |
       |   LINK_IO   |      ----> insert to defer_list  ----------|
       |-------------|                                            |
       |   LINK_IO   |      ----> insert to defer_list  ----------|
       |-------------|                                            |
       |   NORMAL_IO |      ----> insert to defer_list  ----------|
       |-------------|                                            |
                                                                  |
                                  queue_work at same time   <-----|
    
    Fixes: 9e645e1105c ("io_uring: add support for sqe links")
    Signed-off-by: NJackie Liu <liuyun01@kylinos.cn>
    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>
    340538dc
io_uring.c 83.0 KB