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:
parent
55be9a57a6
commit
8736e00f0d
@ -750,6 +750,7 @@ nvme_ctrlr_create_bdev(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid)
|
||||
struct spdk_nvme_ns *ns;
|
||||
const struct spdk_uuid *uuid;
|
||||
const struct spdk_nvme_ctrlr_data *cdata;
|
||||
const struct spdk_nvme_ns_data *nsdata;
|
||||
int rc;
|
||||
|
||||
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.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.fn_table = &nvmelib_fn_table;
|
||||
bdev->disk.module = &nvme_if;
|
||||
|
Loading…
Reference in New Issue
Block a user