bdev/nvme: Return error when creating NVMe bdev with separate metadata

Bdev don't support APIs that passes metadata not interleaved with
logical block data. So, return error explicitly when creating NVMe
bdev with separate metadata for now.

Change-Id: I0776e72232c8e7758ad11b405e7e4914e779d131
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/444011
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: Jim Harris <james.r.harris@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-11 07:15:11 +09:00 committed by Darek Stojaczyk
parent 8736e00f0d
commit 6afc800d93

View File

@ -794,6 +794,13 @@ nvme_ctrlr_create_bdev(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid)
if (bdev->disk.md_len != 0) { if (bdev->disk.md_len != 0) {
nsdata = spdk_nvme_ns_get_data(ns); nsdata = spdk_nvme_ns_get_data(ns);
bdev->disk.md_interleave = nsdata->flbas.extended; bdev->disk.md_interleave = nsdata->flbas.extended;
if (!bdev->disk.md_interleave) {
SPDK_ERRLOG("Bdev doesn't support metadata not intereleaved with block data\n");
free(bdev->disk.name);
nvme_ctrlr->ref--;
memset(bdev, 0, sizeof(*bdev));
return -EINVAL;
}
bdev->disk.dif_type = (enum spdk_dif_type)spdk_nvme_ns_get_pi_type(ns); bdev->disk.dif_type = (enum spdk_dif_type)spdk_nvme_ns_get_pi_type(ns);
if (bdev->disk.dif_type != SPDK_DIF_DISABLE) { if (bdev->disk.dif_type != SPDK_DIF_DISABLE) {
bdev->disk.dif_is_head_of_md = nsdata->dps.md_start; bdev->disk.dif_is_head_of_md = nsdata->dps.md_start;