Merge tag 'for-6.2/io_uring-2022-12-08' of git://git.kernel.dk/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 13 Dec 2022 18:33:08 +0000 (10:33 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 13 Dec 2022 18:33:08 +0000 (10:33 -0800)
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()
  ...

1  2 
include/linux/eventfd.h
io_uring/io_uring.c
io_uring/io_uring.h
io_uring/net.c
io_uring/poll.c
io_uring/rw.c

Simple merge
Simple merge
Simple merge
diff --cc io_uring/net.c
index 2818aeefea420cc863fd9b45de829655318ec9d7,90342dcb6b1d7165d8a221255e7e36c956a4bab6..cb831326ea5b7bce5d4db943b2a002c2e2fcfe96
@@@ -1087,7 -1095,8 +1095,8 @@@ int io_send_zc(struct io_kiocb *req, un
                        return ret;
                msg.sg_from_iter = io_sg_from_iter;
        } else {
 -              ret = import_single_range(WRITE, zc->buf, zc->len, &iov,
+               io_notif_set_extended(zc->notif);
 +              ret = import_single_range(ITER_SOURCE, zc->buf, zc->len, &iov,
                                          &msg.msg_iter);
                if (unlikely(ret))
                        return ret;
diff --cc io_uring/poll.c
Simple merge
diff --cc io_uring/rw.c
Simple merge