From: Klaus Jensen <k.jen...@samsung.com> This series adds support for extended LBAs and end-to-end data protection. Marked RFC, since there are a bunch of issues that could use some discussion.
Storing metadata bytes contiguously with the logical block data and creating a physically extended logical block basically breaks the DULBE and deallocation support I just added. Formatting a namespace with protection information requires the app- and reftags of deallocated or unwritten blocks to be 0xffff and 0xffffffff respectively; this could be used to reintroduce DULBE support in that case, albeit at a somewhat higher cost than the block status flag-based approach. There is basically three ways of storing metadata (and maybe a forth, but that is probably quite the endeavour): 1. Storing metadata as extended blocks directly on the blockdev. That is the approach used in this RFC. 2. Use a separate blockdev. Incidentially, this is also the easiest and most straightforward solution to support MPTR-based "separate metadata". This also allows DULBE and block deallocation to be supported using the existing approach. 3. A hybrid of 1 and 2 where the metadata is stored contiguously at the end of the nvme-ns blockdev. Option 1 obviously works well with DIF-based protection information and extended LBAs since it maps one to one. Option 2 works flawlessly with MPTR-based metadata, but extended LBAs can be "emulated" at the cost of a bunch of scatter/gather operations. The 4th option is extending an existing image format (QCOW2) or create something on top of RAW to supports metadata bytes per block. But both approaches require full API support through the block layer. And probably a lot of other stuff that I did not think about. Anyway, we would love some comments on this. Gollu Appalanaidu (2): nvme: add support for extended LBAs hw/block/nvme: end-to-end data protection Klaus Jensen (1): hw/block/nvme: refactor nvme_dma hw/block/nvme-ns.h | 22 +- hw/block/nvme.h | 36 +++ include/block/nvme.h | 24 +- hw/block/nvme-ns.c | 66 ++++- hw/block/nvme.c | 616 ++++++++++++++++++++++++++++++++++++++---- hw/block/trace-events | 10 + 6 files changed, 704 insertions(+), 70 deletions(-) -- 2.29.2