Commit a766dd00 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Ben Walker
Browse files

nvme/fio_plugin: Fix the issue that PRACT doesn't work when metadata size is 8 bytes



When PRACT is set, if metadata size is 8 bytes, PI is stripped
(read) or inserted (write). Hence block size must not include
metadata size for extended LBA payload. This patch fixes the issue
by reducing metadata size from block size for this case.

On the other hand, When PRACT is set, if metadata size is larger
than 8 bytes, PI is passed (read) or replaced (write). So block
size is not necessary to change for this case.

Signed-off-by: default avatarJames Bergsten <jamesx.bergsten@intel.com>
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I930c8a07519a4742c44240801b068fac2c4802a7
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/465708


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent a0d31fe5
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -788,6 +788,14 @@ spdk_fio_queue(struct thread_data *td, struct io_u *io_u)
	fio_req->fio_qpair = fio_qpair;

	block_size = spdk_nvme_ns_get_extended_sector_size(ns);
	if ((fio_qpair->io_flags & g_spdk_pract_flag) && (spdk_nvme_ns_get_md_size(ns) == 8)) {
		/* If metadata size = 8 bytes, PI is stripped (read) or inserted (write), and
		 *  so reduce metadata size from block size.  (If metadata size > 8 bytes, PI
		 *  is passed (read) or replaced (write).  So block size is not necessary to
		 *  change.)
		 */
		block_size = spdk_nvme_ns_get_sector_size(ns);
	}

	lba = io_u->offset / block_size;
	lba_count = io_u->xfer_buflen / block_size;