nvmf: Hide DIF setting of the backend bdev if DIF insert/strip is enabled
When the NVMf controller's flag dif_insert_or_strip is enabled, DIF is inserted for write I/O and stripped for read I/O, and the corresponding NVMe-oF initiator should not be aware of the DIF setting of the backend bdev. Hence this patch hides the DIF setting of the backend bdev when the flag dif_insert_or_strip is enabled. Change-Id: I3c14880c2e94cba7f76b1bca78afb36bfe884e26 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/456731 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
parent
4ff3665ce9
commit
1c7f92f075
@ -1549,7 +1549,7 @@ spdk_nvmf_ctrlr_identify_ns(struct spdk_nvmf_ctrlr *ctrlr,
|
||||
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||
}
|
||||
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(ns, nsdata);
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(ns, nsdata, ctrlr->dif_insert_or_strip);
|
||||
|
||||
/* Due to bug in the Linux kernel NVMe driver we have to set noiob no larger than mdts */
|
||||
max_num_blocks = ctrlr->admin_qpair->transport->opts.max_io_size /
|
||||
|
@ -103,7 +103,8 @@ nvmf_bdev_ctrlr_complete_cmd(struct spdk_bdev_io *bdev_io, bool success,
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata)
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata,
|
||||
bool dif_insert_or_strip)
|
||||
{
|
||||
struct spdk_bdev *bdev = ns->bdev;
|
||||
uint64_t num_blocks;
|
||||
@ -115,32 +116,37 @@ 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);
|
||||
if (!dif_insert_or_strip) {
|
||||
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_DEBUGLOG(SPDK_LOG_NVMF, "Protection Disabled\n");
|
||||
nsdata->dps.pit = SPDK_NVME_FMT_NVM_PROTECTION_DISABLE;
|
||||
break;
|
||||
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_DEBUGLOG(SPDK_LOG_NVMF, "Protection Disabled\n");
|
||||
nsdata->dps.pit = SPDK_NVME_FMT_NVM_PROTECTION_DISABLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nsdata->lbaf[0].ms = 0;
|
||||
nsdata->lbaf[0].lbads = spdk_u32log2(spdk_bdev_get_data_block_size(bdev));
|
||||
}
|
||||
nsdata->noiob = spdk_bdev_get_optimal_io_boundary(bdev);
|
||||
nsdata->nmic.can_share = 1;
|
||||
|
@ -382,7 +382,8 @@ bool spdk_nvmf_ctrlr_dsm_supported(struct spdk_nvmf_ctrlr *ctrlr);
|
||||
bool spdk_nvmf_ctrlr_write_zeroes_supported(struct spdk_nvmf_ctrlr *ctrlr);
|
||||
void spdk_nvmf_ctrlr_ns_changed(struct spdk_nvmf_ctrlr *ctrlr, uint32_t nsid);
|
||||
|
||||
void spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata);
|
||||
void spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata,
|
||||
bool dif_insert_or_strip);
|
||||
int spdk_nvmf_bdev_ctrlr_read_cmd(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
||||
struct spdk_io_channel *ch, struct spdk_nvmf_request *req);
|
||||
int spdk_nvmf_bdev_ctrlr_write_cmd(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
||||
|
@ -175,7 +175,8 @@ spdk_nvmf_qpair_disconnect(struct spdk_nvmf_qpair *qpair, nvmf_qpair_disconnect_
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata)
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata,
|
||||
bool dif_insert_or_strip)
|
||||
{
|
||||
uint64_t num_blocks;
|
||||
|
||||
|
@ -213,7 +213,8 @@ spdk_nvmf_qpair_disconnect(struct spdk_nvmf_qpair *qpair, nvmf_qpair_disconnect_
|
||||
}
|
||||
|
||||
void
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata)
|
||||
spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *nsdata,
|
||||
bool dif_insert_or_strip)
|
||||
{
|
||||
uint64_t num_blocks;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user