[GIT PULL] io_uring support for zerocopy send

Jens Axboe
2022-07-31T15:03:46Z

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