diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 2551e0c30..e3335d2b0 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1779,7 +1779,11 @@ bdev_nvme_reset_ctrlr(struct spdk_io_channel_iter *i, int status) assert(status == 0); - nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_reconnect_ctrlr); + if (!spdk_nvme_ctrlr_is_fabrics(nvme_ctrlr->ctrlr)) { + bdev_nvme_reconnect_ctrlr(nvme_ctrlr); + } else { + nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_reconnect_ctrlr); + } } static void @@ -1799,10 +1803,11 @@ _bdev_nvme_reset(void *ctx) assert(nvme_ctrlr->resetting == true); assert(nvme_ctrlr->thread == spdk_get_thread()); - spdk_nvme_ctrlr_prepare_for_reset(nvme_ctrlr->ctrlr); - - /* First, delete all NVMe I/O queue pairs. */ - bdev_nvme_reset_destroy_qpairs(nvme_ctrlr); + if (!spdk_nvme_ctrlr_is_fabrics(nvme_ctrlr->ctrlr)) { + nvme_ctrlr_disconnect(nvme_ctrlr, bdev_nvme_reset_destroy_qpairs); + } else { + bdev_nvme_reset_destroy_qpairs(nvme_ctrlr); + } } static int 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 afd12e756..72d388a89 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 @@ -112,6 +112,8 @@ DEFINE_STUB_V(spdk_nvme_ctrlr_register_aer_callback, (struct spdk_nvme_ctrlr *ct DEFINE_STUB_V(spdk_nvme_ctrlr_register_timeout_callback, (struct spdk_nvme_ctrlr *ctrlr, uint64_t timeout_io_us, uint64_t timeout_admin_us, spdk_nvme_timeout_cb cb_fn, void *cb_arg)); +DEFINE_STUB(spdk_nvme_ctrlr_is_fabrics, bool, (struct spdk_nvme_ctrlr *ctrlr), true); + DEFINE_STUB(spdk_nvme_ctrlr_is_ocssd_supported, bool, (struct spdk_nvme_ctrlr *ctrlr), false); DEFINE_STUB(spdk_nvme_ctrlr_cmd_abort, int, (struct spdk_nvme_ctrlr *ctrlr,