Hi uring-cmd lacks the ability to leverage the pre-registered buffers. This series adds that support in uring-cmd, and plumbs nvme passthrough to work with it. Patch 3 and 4 contains a bunch of general nvme cleanups, which got added along the iterations. Using registered-buffers showed IOPS hike from 1.65M to 2.04M. Without fixedbufs ***************** # taskset -c 0 t/io_uring -b512 -d128 -c32 -s32 -p1 -F1 -B0 -O0 -n1 -u1 /dev/ng0n1 submitter=0, tid=2178, file=/dev/ng0n1, node=-1 polled=1, fixedbufs=0/0, register_files=1, buffered=1, QD=128 Engine=io_uring, sq_ring=128, cq_ring=128 IOPS=1.63M, BW=796MiB/s, IOS/call=32/31 IOPS=1.64M, BW=800MiB/s, IOS/call=32/32 IOPS=1.64M, BW=801MiB/s, IOS/call=32/32 IOPS=1.65M, BW=803MiB/s, IOS/call=32/31 ^CExiting on signal Maximum IOPS=1.65M With fixedbufs ************** # taskset -c 0 t/io_uring -b512 -d128 -c32 -s32 -p1 -F1 -B1 -O0 -n1 -u1 /dev/ng0n1 submitter=0, tid=2180, file=/dev/ng0n1, node=-1 polled=1, fixedbufs=1/0, register_files=1, buffered=1, QD=128 Engine=io_uring, sq_ring=128, cq_ring=128 IOPS=2.03M, BW=991MiB/s, IOS/call=32/31 IOPS=2.04M, BW=998MiB/s, IOS/call=32/32 IOPS=2.04M, BW=997MiB/s, IOS/call=32/31 ^CExiting on signal Maximum IOPS=2.04M Changes since v9: - Patch 6: Make blk_rq_map_user_iov() to operate on bvec iterator (Christoph) - Patch 7: Change nvme to use the above Changes since v8: - Split some patches further; now 7 patches rather than 5 (Christoph) - Applied a bunch of other suggested cleanups (Christoph) Changes since v7: - Patch 3: added many cleanups/refactoring suggested by Christoph - Patch 4: added copying-pages fallback for bounce-buffer/dma-alignment case (Christoph) Changes since v6: - Patch 1: fix warning for io_uring_cmd_import_fixed (robot) - Changes since v5: - Patch 4: newly addd, to split a nvme function into two - Patch 3: folded cleanups in bio_map_user_iov (Chaitanya, Pankaj) - Rebase to latest for-next Changes since v4: - Patch 1, 2: folded all review comments of Jens Changes since v3: - uring_cmd_flags, change from u16 to u32 (Jens) - patch 3, add another helper to reduce code-duplication (Jens) Changes since v2: - Kill the new opcode, add a flag instead (Pavel) - Fix standalone build issue with patch 1 (Pavel) Changes since v1: - Fix a naming issue for an exported helper Anuj Gupta (2): io_uring: add io_uring_cmd_import_fixed io_uring: introduce fixed buffer support for io_uring_cmd Kanchan Joshi (5): nvme: refactor nvme_add_user_metadata nvme: refactor nvme_alloc_request block: factor out bio_map_get helper block: extend functionality to map bvec iterator nvme: wire up fixed buffer support for nvme passthrough block/blk-map.c | 108 ++++++++++++++++++++--- drivers/nvme/host/ioctl.c | 160 ++++++++++++++++++++-------------- include/linux/io_uring.h | 10 ++- include/uapi/linux/io_uring.h | 9 ++ io_uring/uring_cmd.c | 26 +++++- 5 files changed, 237 insertions(+), 76 deletions(-) -- 2.25.1