This series enables protection information support with xnvme ioengine. The support is provided with the kernel backends that can handle passthrough commands via nvme character device (/dev/ngXnY), or with user space nvme drivers such as SPDK and libvfn. The initial patch adds support for metadata buffer. As we are unaware of metadata size during metadata buffer allocation, we provide an option md_per_io_size. This must be used to specify metadata size for single IO, if namespace is formatted with separate metadata buffer. This then enables the protection information support with and without PRACT bit set for both DIF and DIX cases. The support only covers 16-bit and 64-bit guard protection information format, without storage tags. For the sake of consistency metadata and protection information specific options are the same as the ones used by io_uring_cmd ioengine and SPDK's external ioengine. Ankit Kumar (5): engines/xnvme: allocate iovecs only if vectored I/O is enabled engines/xnvme: add support for metadata engines:xnvme: add support for end to end data protection engines/xnvme: add checks for verify, block size and metadata size examples: add PI example with xnvme ioengine HOWTO.rst | 10 +- configure | 2 +- engines/xnvme.c | 331 +++++++++++++++++++++++++++++++++++++++--- examples/xnvme-pi.fio | 53 +++++++ examples/xnvme-pi.png | Bin 0 -> 71285 bytes fio.1 | 10 +- 6 files changed, 378 insertions(+), 28 deletions(-) create mode 100644 examples/xnvme-pi.fio create mode 100644 examples/xnvme-pi.png -- 2.25.1