• J
    io_uring: replace workqueue usage with io-wq · 736930db
    Jens Axboe 提交于
    commit 561fb04a6a2257716738dac2ed812f377c2634c2 upstream.
    
    Drop various work-arounds we have for workqueues:
    
    - We no longer need the async_list for tracking sequential IO.
    
    - We don't have to maintain our own mm tracking/setting.
    
    - We don't need a separate workqueue for buffered writes. This didn't
      even work that well to begin with, as it was suboptimal for multiple
      buffered writers on multiple files.
    
    - We can properly cancel pending interruptible work. This fixes
      deadlocks with particularly socket IO, where we cannot cancel them
      when the io_uring is closed. Hence the ring will wait forever for
      these requests to complete, which may never happen. This is different
      from disk IO where we know requests will complete in a finite amount
      of time.
    
    - Due to being able to cancel work interruptible work that is already
      running, we can implement file table support for work. We need that
      for supporting system calls that add to a process file table.
    
    - It gets us one step closer to adding async support for any system
      call.
    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>
    736930db
io-wq.c 18.9 KB