From 6afc800d939872f068a0e4093d06bae1ebcbdaa6 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 11 Feb 2019 07:15:11 +0900 Subject: [PATCH] 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 Reviewed-on: https://review.gerrithub.io/c/444011 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu --- lib/bdev/nvme/bdev_nvme.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/bdev/nvme/bdev_nvme.c b/lib/bdev/nvme/bdev_nvme.c index b11950303..c250b6e3b 100644 --- a/lib/bdev/nvme/bdev_nvme.c +++ b/lib/bdev/nvme/bdev_nvme.c @@ -794,6 +794,13 @@ nvme_ctrlr_create_bdev(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid) if (bdev->disk.md_len != 0) { nsdata = spdk_nvme_ns_get_data(ns); 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); if (bdev->disk.dif_type != SPDK_DIF_DISABLE) { bdev->disk.dif_is_head_of_md = nsdata->dps.md_start;