Hi Linus, On top of the core io_uring changes, this pull request adds support for efficient support for zerocopy sends through io_uring. Both ipv4 and ipv6 is supported, as well as both TCP and UDP. The core network changes to support this is in a stable branch from Jakub that both io_uring and net-next has pulled in, and the io_uring changes are layered on top of that. All of the work has been done by Pavel. Please pull! The following changes since commit f6b543fd03d347e8bf245cee4f2d54eb6ffd8fcb: io_uring: ensure REQ_F_ISREG is set async offload (2022-07-24 18:39:18 -0600) are available in the Git repository at: git://git.kernel.dk/linux-block.git tags/for-5.20/io_uring-zerocopy-send-2022-07-29 for you to fetch changes up to 14b146b688ad9593f5eee93d51a34d09a47e50b5: io_uring: notification completion optimisation (2022-07-27 08:50:50 -0600) ---------------------------------------------------------------- for-5.20/io_uring-zerocopy-send-2022-07-29 ---------------------------------------------------------------- David Ahern (1): net: Allow custom iter handler in msghdr Jens Axboe (2): Merge branch 'io_uring-zerocopy-send' of git://git.kernel.org/pub/scm/linux/kernel/git/kuba/linux into for-5.20/io_uring-zerocopy-send Merge branch 'for-5.20/io_uring' into for-5.20/io_uring-zerocopy-send Pavel Begunkov (33): ipv4: avoid partial copy for zc ipv6: avoid partial copy for zc skbuff: don't mix ubuf_info from different sources skbuff: add SKBFL_DONT_ORPHAN flag skbuff: carry external ubuf_info in msghdr net: introduce managed frags infrastructure net: introduce __skb_fill_page_desc_noacc ipv4/udp: support externally provided ubufs ipv6/udp: support externally provided ubufs tcp: support externally provided ubufs net: fix uninitialised msghdr->sg_from_iter io_uring: initialise msghdr::msg_ubuf io_uring: export io_put_task() io_uring: add zc notification infrastructure io_uring: cache struct io_notif io_uring: complete notifiers in tw io_uring: add rsrc referencing for notifiers io_uring: add notification slot registration io_uring: wire send zc request type io_uring: account locked pages for non-fixed zc io_uring: allow to pass addr into sendzc io_uring: sendzc with fixed buffers io_uring: flush notifiers after sendzc io_uring: rename IORING_OP_FILES_UPDATE io_uring: add zc notification flush requests io_uring: enable managed frags with register buffers selftests/io_uring: test zerocopy send io_uring/net: improve io_get_notif_slot types io_uring/net: checks errors of zc mem accounting io_uring/net: make page accounting more consistent io_uring/net: use unsigned for flags io_uring: export req alloc from core io_uring: notification completion optimisation include/linux/io_uring_types.h | 30 + include/linux/skbuff.h | 66 ++- include/linux/socket.h | 5 + include/uapi/linux/io_uring.h | 45 +- io_uring/Makefile | 2 +- io_uring/io_uring.c | 61 +-- io_uring/io_uring.h | 43 ++ io_uring/net.c | 193 ++++++- io_uring/net.h | 3 + io_uring/notif.c | 159 ++++++ io_uring/notif.h | 90 +++ io_uring/opdef.c | 24 +- io_uring/rsrc.c | 67 ++- io_uring/rsrc.h | 25 +- io_uring/tctx.h | 26 - net/compat.c | 1 + net/core/datagram.c | 14 +- net/core/skbuff.c | 37 +- net/ipv4/ip_output.c | 50 +- net/ipv4/tcp.c | 33 +- net/ipv6/ip6_output.c | 49 +- net/socket.c | 2 + tools/testing/selftests/net/Makefile | 1 + tools/testing/selftests/net/io_uring_zerocopy_tx.c | 605 +++++++++++++++++++++ .../testing/selftests/net/io_uring_zerocopy_tx.sh | 131 +++++ 25 files changed, 1604 insertions(+), 158 deletions(-) create mode 100644 io_uring/notif.c create mode 100644 io_uring/notif.h create mode 100644 tools/testing/selftests/net/io_uring_zerocopy_tx.c create mode 100755 tools/testing/selftests/net/io_uring_zerocopy_tx.sh -- Jens Axboe