diff --git a/lib/nvmf/ctrlr_bdev.c b/lib/nvmf/ctrlr_bdev.c index cf1eccf79..116d54e1f 100644 --- a/lib/nvmf/ctrlr_bdev.c +++ b/lib/nvmf/ctrlr_bdev.c @@ -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; diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 4011fd647..4df1c56a7 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -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));