• Linus Torvalds's avatar
    Merge tag 'io_uring-worker.v3-2021-02-25' of git://git.kernel.dk/linux-block · 5695e516
    Linus Torvalds authored
    Pull io_uring thread rewrite from Jens Axboe:
     "This converts the io-wq workers to be forked off the tasks in question
      instead of being kernel threads that assume various bits of the
      original task identity.
    
      This kills > 400 lines of code from io_uring/io-wq, and it's the worst
      part of the code. We've had several bugs in this area, and the worry
      is always that we could be missing some pieces for file types doing
      unusual things (recent /dev/tty example comes to mind, userfaultfd
      reads installing file descriptors is another fun one... - both of
      which need special handling, and I bet it's not the last weird oddity
      we'll find).
    
      With these identical workers, we can have full confidence that we're
      never missing anything. That, in itself, is a huge win. Outside of
      that, it's also more efficient since we're not wasting space and code
      on tracking state, or switching between different states.
    
      I'm sure we're going to find little things to patch up after this
      series, but testing has been pretty thorough, from the usual
      regression suite to production. Any issue that may crop up should be
      manageable.
    
      There's also a nice series of further reductions we can do on top of
      this, but I wanted to get the meat of it out sooner rather than later.
      The general worry here isn't that it's fundamentally broken. Most of
      the little issues we've found over the last week have been related to
      just changes in how thread startup/exit is done, since that's the main
      difference between using kthreads and these kinds of threads. In fact,
      if all goes according to plan, I want to get this into the 5.10 and
      5.11 stable branches as well.
    
      That said, the changes outside of io_uring/io-wq are:
    
       - arch setup, simple one-liner to each arch copy_thread()
         implementation.
    
       - Removal of net and proc restrictions for io_uring, they are no
         longer needed or useful"
    
    * tag 'io_uring-worker.v3-2021-02-25' of git://git.kernel.dk/linux-block: (30 commits)
      io-wq: remove now unused IO_WQ_BIT_ERROR
      io_uring: fix SQPOLL thread handling over exec
      io-wq: improve manager/worker handling over exec
      io_uring: ensure SQPOLL startup is triggered before error shutdown
      io-wq: make buffered file write hashed work map per-ctx
      io-wq: fix race around io_worker grabbing
      io-wq: fix races around manager/worker creation and task exit
      io_uring: ensure io-wq context is always destroyed for tasks
      arch: ensure parisc/powerpc handle PF_IO_WORKER in copy_thread()
      io_uring: cleanup ->user usage
      io-wq: remove nr_process accounting
      io_uring: flag new native workers with IORING_FEAT_NATIVE_WORKERS
      net: remove cmsg restriction from io_uring based send/recvmsg calls
      Revert "proc: don't allow async path resolution of /proc/self components"
      Revert "proc: don't allow async path resolution of /proc/thread-self components"
      io_uring: move SQPOLL thread io-wq forked worker
      io-wq: make io_wq_fork_thread() available to other users
      io-wq: only remove worker from free_list, if it was there
      io_uring: remove io_identity
      io_uring: remove any grabbing of context
      ...
    5695e516
process.c 7.06 KB