Commit df99e281 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Changpeng Liu
Browse files

nvmf: Expose bdev's PI setting to NVMe-oF Initiator



This patch expose backend's bdev's PI setting to the corresponding
NVMe-oF Initiator by Ideintify command, and removes the check if
block size is 512 multiple.

These change enables NVMe-oF Initiator to send extended LBA payload.

Change-Id: Ia7aa8332d36f056872a515b6da90c83112edb909
Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/445056


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 815f82b1
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -115,7 +115,33 @@ spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_da
	nsdata->nuse = num_blocks;
	nsdata->nlbaf = 0;
	nsdata->flbas.format = 0;
	nsdata->lbaf[0].ms = spdk_bdev_get_md_size(bdev);
	nsdata->lbaf[0].lbads = spdk_u32log2(spdk_bdev_get_block_size(bdev));
	if (nsdata->lbaf[0].ms != 0) {
		nsdata->flbas.extended = 1;
		nsdata->mc.extended = 1;
		nsdata->mc.pointer = 0;
		nsdata->dps.md_start = spdk_bdev_is_dif_head_of_md(bdev);

		switch (spdk_bdev_get_dif_type(bdev)) {
		case SPDK_DIF_TYPE1:
			nsdata->dpc.pit1 = 1;
			nsdata->dps.pit = SPDK_NVME_FMT_NVM_PROTECTION_TYPE1;
			break;
		case SPDK_DIF_TYPE2:
			nsdata->dpc.pit2 = 1;
			nsdata->dps.pit = SPDK_NVME_FMT_NVM_PROTECTION_TYPE2;
			break;
		case SPDK_DIF_TYPE3:
			nsdata->dpc.pit3 = 1;
			nsdata->dps.pit = SPDK_NVME_FMT_NVM_PROTECTION_TYPE3;
			break;
		default:
			SPDK_ERRLOG("Unknown DIF type: %d\n", spdk_bdev_get_dif_type(bdev));
			assert(false);
			break;
		}
	}
	nsdata->noiob = spdk_bdev_get_optimal_io_boundary(bdev);
	nsdata->nmic.can_share = 1;

+0 −6
Original line number Diff line number Diff line
@@ -995,12 +995,6 @@ spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bd
		return 0;
	}

	if (spdk_bdev_get_block_size(bdev) % 512) {
		SPDK_ERRLOG("Block size %u for Bdev %s is not supported now\n",
			    spdk_bdev_get_block_size(bdev), spdk_bdev_get_name(bdev));
		return 0;
	}

	spdk_nvmf_ns_opts_get_defaults(&opts, sizeof(opts));
	if (user_opts) {
		memcpy(&opts, user_opts, spdk_min(sizeof(opts), opts_size));