diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 7e0ecf5bd..3abbaf684 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -2604,6 +2604,13 @@ static int nvme_bdev_add_ns(struct nvme_bdev *bdev, struct nvme_ns *nvme_ns) { struct nvme_ns *tmp_ns; + const struct spdk_nvme_ns_data *nsdata; + + nsdata = spdk_nvme_ns_get_data(nvme_ns->ns); + if (!nsdata->nmic.can_share) { + SPDK_ERRLOG("Namespace cannot be shared.\n"); + return -EINVAL; + } pthread_mutex_lock(&bdev->mutex); diff --git a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c index 318dc1688..0b1a47b16 100644 --- a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c +++ b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c @@ -371,7 +371,7 @@ spdk_nvme_transport_id_compare(const struct spdk_nvme_transport_id *trid1, static struct spdk_nvme_ctrlr * ut_attach_ctrlr(const struct spdk_nvme_transport_id *trid, uint32_t num_ns, - bool ana_reporting, bool multi_ctrlr) + bool ana_reporting, bool multipath) { struct spdk_nvme_ctrlr *ctrlr; uint32_t i; @@ -413,6 +413,7 @@ ut_attach_ctrlr(const struct spdk_nvme_transport_id *trid, uint32_t num_ns, ctrlr->ns[i].is_active = true; ctrlr->ns[i].ana_state = SPDK_NVME_ANA_OPTIMIZED_STATE; ctrlr->nsdata[i].nsze = 1024; + ctrlr->nsdata[i].nmic.can_share = multipath; } ctrlr->cdata.nn = num_ns; @@ -420,7 +421,7 @@ ut_attach_ctrlr(const struct spdk_nvme_transport_id *trid, uint32_t num_ns, } ctrlr->cdata.cntlid = ++g_ut_cntlid; - ctrlr->cdata.cmic.multi_ctrlr = multi_ctrlr; + ctrlr->cdata.cmic.multi_ctrlr = multipath; ctrlr->cdata.cmic.ana_reporting = ana_reporting; ctrlr->trid = *trid; TAILQ_INIT(&ctrlr->active_io_qpairs);