[PATCHv2 0/6] ublk zero-copy support

Keith Busch
2025-02-11T00:57:16Z

From: Keith Busch <kbusch@kernel.org>

Previous version was discussed here:

https://lore.kernel.org/linux-block/20250203154517.937623-1-kbusch@meta.com/

The same ublksrv reference code in that link was used to test the kernel
side changes.

Before listing what has changed, I want to mention what is the same: the
reliance on the ring ctx lock to serialize the register ahead of any
use. I'm not ignoring the feedback; I just don't have a solid answer
right now, and want to progress on the other fronts in the meantime.

Here's what's different from the previous:

- Introduced an optional 'release' callback when the resource node is
no longer referenced. The callback addresses any buggy applications
that may complete their request and unregister their index while IO
is in flight. This obviates any need to take extra page references
since it prevents the request from completing.

- Removed peeking into the io_cache element size and instead use a
more intuitive bvec segment count limit to decide if we're caching
the imu (suggested by Pavel).

- Dropped the const request changes; it's not needed.

- Merged up to latest block uring branch

Jens Axboe (1):
io_uring: use node for import

Keith Busch (5):
io_uring: create resource release callback
io_uring: add support for kernel registered bvecs
ublk: zc register/unregister bvec
io_uring: add abstraction for buf_table rsrc data
io_uring: cache nodes and mapped buffers

drivers/block/ublk_drv.c | 145 ++++++++++++++-----
include/linux/io_uring.h | 1 +
include/linux/io_uring_types.h | 28 ++--
include/uapi/linux/ublk_cmd.h | 4 +
io_uring/fdinfo.c | 8 +-
io_uring/filetable.c | 2 +-
io_uring/net.c | 5 +-
io_uring/nop.c | 2 +-
io_uring/register.c | 2 +-
io_uring/rsrc.c | 252 ++++++++++++++++++++++++++-------
io_uring/rsrc.h | 11 +-
io_uring/rw.c | 4 +-
io_uring/uring_cmd.c | 4 +-
13 files changed, 355 insertions(+), 113 deletions(-)

--
2.43.5