Spdk/lib/util
Shuhei Matsumoto f4a62a3993 dif: Add spdk_dif_remap_ref_tag to remap ref. tag for extended LBA payload
When using stacked virtual bdev (e.g. split virtual bdev), block
address space will be remapped during I/O processing and so reference
tag will have to be remapped accordingly.

The use case is explained in detail as follows:

- Format a single NVMe SSD with DIF enabled.
- Create a NVMe bdev on the NVMe SSD with DIF enabled.
- Create four split vbdevs on the NVMe bdev.
- Add the split vbdevs to a NVMe-oF target.
- Application is aware of block address space of the split vbdevs.
- Application submits read/write I/O to the NVMe-oF target.

Case 1:
- Configure NVMe-oF target to DIF pass-through.

Case 2:
- Configure NVMe-oF target to DIF insert/strip

For the case 1,
- Application inserts DIF for write I/O and verifies DIF for read I/O.
- The split vbdevs remaps reference tags of DIF both for read and write
  I/O because application expects reference tags are based on the
  block address space of split vbdevs.
- The NVMe bdev processs read/write I/Os without remapping reference tags
  because reference tags are already based on the block address space
  of the NVMe bdev.

For the case 2,
- NVMe-oF target inserts DIF for write I/O, and verifies and strips
  DIF or read I/O.
- The split vbdevs remaps reference tags of DIF both for read and write
  I/O because NVMe-oF target expects reference tags are based on the
  block address space of split vbdevs.
- The NVMe bdev processs read/write I/Os without remapping reference tags
  because reference tags are already based on the block address space
  of the NVMe bdev.

This patch adds two APIs, spdk_dif_ctx_set_remapped_init_ref_tag
and spdk_dif_remap_ref_tag to satisfy the use case.

UT code is added together in this patch.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ib3101129225b334d2f578eab75197790b1818770
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/461103
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2019-07-11 11:14:22 +00:00
..
base64.c util/base64: add base64 lib and unit tests 2018-07-19 00:50:54 +00:00
bit_array.c util/bit_array: switch to spdk_*malloc(). 2019-04-09 06:30:42 +00:00
cpuset.c cpuset: Expose internal of struct spdk_cpuset in header file 2019-07-04 00:30:22 +00:00
crc16.c util: fix crc16 build 2019-03-11 01:41:35 +00:00
crc32_ieee.c util: add CRC32 utility functions 2017-08-02 19:47:35 -04:00
crc32.c Update spdk crc32.c with ARM CRC32 intrinsics 2019-01-29 18:23:01 +00:00
crc32c.c util: Move architecture detection to crc32c.c 2019-02-04 19:14:22 +00:00
dif.c dif: Add spdk_dif_remap_ref_tag to remap ref. tag for extended LBA payload 2019-07-11 11:14:22 +00:00
fd.c util/fd: drop fallback from spdk_fd_get_blocklen() 2017-08-11 19:36:30 -04:00
file.c util: add a new file operation API 2019-05-15 18:54:27 +00:00
Makefile util: add a new file operation API 2019-05-15 18:54:27 +00:00
strerror_tls.c util: add spdk_strerror() wrapper with TLS support 2018-01-04 15:00:09 -05:00
string.c lib/util: fix spdk_strerror() empty string return 2019-07-10 08:29:21 +00:00
uuid.c util/uuid: add a new uuid copy API. 2018-12-06 22:25:09 +00:00