Hello Jens, This patch tries to address limitation from in-tree ublk zero copy: - one IO needs two extra uring_cmd for register/unregister bvec buffer, not efficient - introduced dependency on the two buffer register/unregister uring_cmd, so buffer consumer has to linked with the two uring_cmd, hard to use & less efficient This patchset adds feature UBLK_F_AUTO_BUF_REG: - register request buffer automatically before delivering io command to ublk server - unregister request buffer automatically when completing the request - buffer index is specified from ublk uring_cmd header With this way, 'fio/t/io_uring -p0 /dev/ublkb0' shows that IOPS is improved by 50% compared with F_SUPPORT_ZERO_COPY in my test VM. kernel selftests are added for covering both function & stress test. V2: - drop RFC - not cover buffer registering to external io_uring, so drop io_uring changes, and it can be done in future, the defined UAPI interface provides this extension - add one extra patch for relaxing context constraint for buffer register/ unregister command - support to fallback to ublk server for registering buffer in case of auto buffer register failure, add tests for covering this feature - code cleanup & comment improvement(Caleb Sander Mateos) Link: https://lore.kernel.org/linux-block/20250428094420.1584420-1-ming.lei@xxxxxxxxxx/ Ming Lei (6): ublk: allow io buffer register/unregister command issued from other task contexts ublk: convert to refcount_t ublk: prepare for supporting to register request buffer automatically ublk: register buffer to local io_uring with provided buf index via UBLK_F_AUTO_BUF_REG selftests: ublk: support UBLK_F_AUTO_BUF_REG selftests: ublk: add test for covering UBLK_AUTO_BUF_REG_FALLBACK drivers/block/ublk_drv.c | 157 ++++++++++++++---- include/uapi/linux/ublk_cmd.h | 64 +++++++ tools/testing/selftests/ublk/Makefile | 3 + tools/testing/selftests/ublk/fault_inject.c | 5 + tools/testing/selftests/ublk/file_backed.c | 17 +- tools/testing/selftests/ublk/kublk.c | 49 +++++- tools/testing/selftests/ublk/kublk.h | 18 ++ tools/testing/selftests/ublk/null.c | 55 ++++-- tools/testing/selftests/ublk/stripe.c | 26 +-- .../testing/selftests/ublk/test_generic_08.sh | 32 ++++ .../testing/selftests/ublk/test_generic_09.sh | 28 ++++ .../testing/selftests/ublk/test_stress_03.sh | 7 + .../testing/selftests/ublk/test_stress_04.sh | 7 + .../testing/selftests/ublk/test_stress_05.sh | 9 + 14 files changed, 417 insertions(+), 60 deletions(-) create mode 100755 tools/testing/selftests/ublk/test_generic_08.sh create mode 100755 tools/testing/selftests/ublk/test_generic_09.sh -- 2.47.0