This patchset adds a new I/O engine (io_uring_cmd), which enables support for io_uring passthrough commands. This work is based on upcoming 5.19 kernel. https://git.kernel.dk/cgit/linux-block/log/?h=for-next This engine will use most of the existing helpers from io_uring. The I/O preparation, completion, file open, file close and post init paths are going to differ and hence io_uring_cmd will have its own helpers for them. The supported io_uring_cmd options are: * registerfiles * sqthread_poll * sqthread_poll_cpu * nonvectored * force_async * cmd_type (new) The current uring passthrough support is present only with nvme-ns character device (/dev/ngXnY). This includes both conventional as well as ZNS devices. cmd_type provides the flexibility to support different types of passthrough commands in future. To enable support for nvme passthrough commands, we are adding nvme.c and nvme.h files. These will have the necessary NVMe specification data strcutures, opcodes and helper functions for sending admin and I/O passthrough commands. O_DIRECT flag support is not present with nvme-ns charatcer devices, hence zbd will check for them only if fio filetype is a block device. The t/zbd/test-zbd-support test case #1 is now updated to run only for block device. Changes since v1: - Removed libnvme dependency. - Addressed review comments from Jens, no longer messy CONFIG flags for the new engine. - Addressed review comment from Shinichiro. Ankit Kumar (5): configure: check nvme uring command support nvme: add nvme opcodes, structures and helper functions docs: document options for io_uring_cmd I/O engine zbd: Check for direct flag only if its block device engines/io_uring: Enable zone device support for io_uring_cmd I/O engine Anuj Gupta (3): io_uring.h: add IORING_SETUP_SQE128 and IORING_SETUP_CQE32 engines/io_uring: add new I/O engine for uring passthrough support examples: add 2 example job file for io_uring_cmd engine HOWTO.rst | 39 +++- Makefile | 4 +- configure | 21 +++ engines/io_uring.c | 336 +++++++++++++++++++++++++++++++++- engines/nvme.c | 338 +++++++++++++++++++++++++++++++++++ engines/nvme.h | 204 +++++++++++++++++++++ examples/uring-cmd-ng.fio | 35 ++++ examples/uring-cmd-zoned.fio | 40 +++++ file.h | 12 +- fio.1 | 28 ++- os/linux/io_uring.h | 45 ++++- t/zbd/test-zbd-support | 3 +- zbd.c | 4 +- 13 files changed, 1080 insertions(+), 29 deletions(-) create mode 100644 engines/nvme.c create mode 100644 engines/nvme.h create mode 100644 examples/uring-cmd-ng.fio create mode 100644 examples/uring-cmd-zoned.fio base-commit: 6f1a24593c227a4f392f454698aca20e95f0006c -- 2.17.1