[PATCH 0/2] io_uring/net: support registered buffer for plain send and recv
Ming Lei <[email protected]>
| Newsgroups | org.kernel.vger.io-uring |
|---|---|
| Message-ID | <[email protected]> |
From: Ming Lei <[email protected]> Hi, This series wires IORING_RECVSEND_FIXED_BUF into the plain IORING_OP_SEND and IORING_OP_RECV paths. So far the flag has only been honoured on the SEND_ZC path, even though the import wiring is already present for plain send and completely absent for recv. Motivation: targets such as ublk's NBD backend want to push/pull I/O data directly to/from an io_uring registered buffer over a plain send/recv on a TCP socket, without the SEND_ZC notification machinery. The flag is accepted at prep time for the non-vectorized IORING_OP_SEND / IORING_OP_RECV opcodes only, and is mutually exclusive with buffer select, bundles and (for recv) multishot. The registered buffer is imported lazily at issue time via io_import_reg_buf() (mirroring the existing send path), and the resulting bvec iter persists in async_data so MSG_WAITALL partial send/recv retries resume at the right offset. Patch 1 is the kernel change. Patch 2 adds a liburing test and is meant for the liburing tree. It covers send-fixed/recv-fixed/both-fixed roundtrips (with non-zero offsets into distinct registered buffers), a large MSG_WAITALL transfer that exercises the persisted bvec iter across partial retries, and the negative validation cases (sendmsg/bundle/recv-multishot rejected with -EINVAL, bad buf_index returning -EFAULT). Ming Lei (2): io_uring/net: support registered buffer for plain send and recv test: add fixed-buf-send-recv for registered buffer send/recv io_uring/net.c | 46 ++++++- test/Makefile | 1 + test/fixed-buf-send-recv.c | 300 +++++++++++++++++++++++++++++++++++++ 3 files changed, 345 insertions(+), 2 deletions(-) -- 2.54.0