• Linus Torvalds's avatar
    Merge tag 'for-6.2/io_uring-2022-12-08' of git://git.kernel.dk/linux · 54e60e50
    Linus Torvalds authored
    Pull io_uring updates from Jens Axboe:
    
     - Always ensure proper ordering in case of CQ ring overflow, which then
       means we can remove some work-arounds for that (Dylan)
    
     - Support completion batching for multishot, greatly increasing the
       efficiency for those (Dylan)
    
     - Flag epoll/eventfd wakeups done from io_uring, so that we can easily
       tell if we're recursing into io_uring again.
    
       Previously, this would have resulted in repeated multishot
       notifications if we had a dependency there. That could happen if an
       eventfd was registered as the ring eventfd, and we multishot polled
       for events on it. Or if an io_uring fd was added to epoll, and
       io_uring had a multishot request for the epoll fd.
    
       Test cases here:
    	https://git.kernel.dk/cgit/liburing/commit/?id=919755a7d0096fda08fb6d65ac54ad8d0fe027cd
    
       Previously these got terminated when the CQ ring eventually
       overflowed, now it's handled gracefully (me).
    
     - Tightening of the IOPOLL based completions (Pavel)
    
     - Optimizations of the networking zero-copy paths (Pavel)
    
     - Various tweaks and fixes (Dylan, Pavel)
    
    * tag 'for-6.2/io_uring-2022-12-08' of git://git.kernel.dk/linux: (41 commits)
      io_uring: keep unlock_post inlined in hot path
      io_uring: don't use complete_post in kbuf
      io_uring: spelling fix
      io_uring: remove io_req_complete_post_tw
      io_uring: allow multishot polled reqs to defer completion
      io_uring: remove overflow param from io_post_aux_cqe
      io_uring: add lockdep assertion in io_fill_cqe_aux
      io_uring: make io_fill_cqe_aux static
      io_uring: add io_aux_cqe which allows deferred completion
      io_uring: allow defer completion for aux posted cqes
      io_uring: defer all io_req_complete_failed
      io_uring: always lock in io_apoll_task_func
      io_uring: remove iopoll spinlock
      io_uring: iopoll protect complete_post
      io_uring: inline __io_req_complete_put()
      io_uring: remove io_req_tw_post_queue
      io_uring: use io_req_task_complete() in timeout
      io_uring: hold locks for io_req_complete_failed
      io_uring: add completion locking for iopoll
      io_uring: kill io_cqring_ev_posted() and __io_cq_unlock_post()
      ...
    54e60e50
io_uring.c 108 KB