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: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/445056
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-02-18 13:54:51 +09:00 committed by Changpeng Liu
parent 815f82b17b
commit df99e28158
2 changed files with 26 additions and 6 deletions

View File

@ -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;

View File

@ -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));