bdev/nvme: Set variables about metadata and DIF at NVMe bdev initialization

Metadata location and DIF type are set only if there is metadata, and
DIF location is set only if DIF is enabled.

Change-Id: Ib684b54332820446ff1a0b609f5b4e0b3d42f2f9
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/443344
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>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-02-05 15:00:52 +09:00 committed by Darek Stojaczyk
parent 55be9a57a6
commit 8736e00f0d

View File

@ -750,6 +750,7 @@ nvme_ctrlr_create_bdev(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid)
struct spdk_nvme_ns *ns; struct spdk_nvme_ns *ns;
const struct spdk_uuid *uuid; const struct spdk_uuid *uuid;
const struct spdk_nvme_ctrlr_data *cdata; const struct spdk_nvme_ctrlr_data *cdata;
const struct spdk_nvme_ns_data *nsdata;
int rc; int rc;
cdata = spdk_nvme_ctrlr_get_data(ctrlr); cdata = spdk_nvme_ctrlr_get_data(ctrlr);
@ -789,6 +790,16 @@ nvme_ctrlr_create_bdev(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid)
bdev->disk.uuid = *uuid; bdev->disk.uuid = *uuid;
} }
bdev->disk.md_len = spdk_nvme_ns_get_md_size(ns);
if (bdev->disk.md_len != 0) {
nsdata = spdk_nvme_ns_get_data(ns);
bdev->disk.md_interleave = nsdata->flbas.extended;
bdev->disk.dif_type = (enum spdk_dif_type)spdk_nvme_ns_get_pi_type(ns);
if (bdev->disk.dif_type != SPDK_DIF_DISABLE) {
bdev->disk.dif_is_head_of_md = nsdata->dps.md_start;
}
}
bdev->disk.ctxt = bdev; bdev->disk.ctxt = bdev;
bdev->disk.fn_table = &nvmelib_fn_table; bdev->disk.fn_table = &nvmelib_fn_table;
bdev->disk.module = &nvme_if; bdev->disk.module = &nvme_if;