diff --git a/lib/nvme/nvme.c b/lib/nvme/nvme.c index 5edc1a7d6..49c75e54f 100644 --- a/lib/nvme/nvme.c +++ b/lib/nvme/nvme.c @@ -446,6 +446,7 @@ nvme_ctrlr_poll_internal(struct spdk_nvme_ctrlr *ctrlr, /* Controller failed to initialize. */ TAILQ_REMOVE(&probe_ctx->init_ctrlrs, ctrlr, tailq); SPDK_ERRLOG("Failed to initialize SSD: %s\n", ctrlr->trid.traddr); + nvme_ctrlr_fail(ctrlr, false); nvme_ctrlr_destruct(ctrlr); return rc; } diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index b717fd948..24ba487f9 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -2114,7 +2114,6 @@ nvme_ctrlr_process_init(struct spdk_nvme_ctrlr *ctrlr) goto init_timeout; } SPDK_ERRLOG("Failed to read CC and CSTS in state %d\n", ctrlr->state); - nvme_ctrlr_fail(ctrlr, false); return -EIO; } @@ -2161,7 +2160,6 @@ nvme_ctrlr_process_init(struct spdk_nvme_ctrlr *ctrlr) cc.bits.en = 0; if (nvme_ctrlr_set_cc(ctrlr, &cc)) { SPDK_ERRLOG("set_cc() failed\n"); - nvme_ctrlr_fail(ctrlr, false); return -EIO; } nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_DISABLE_WAIT_FOR_READY_0, ready_timeout_in_ms); @@ -2193,7 +2191,6 @@ nvme_ctrlr_process_init(struct spdk_nvme_ctrlr *ctrlr) cc.bits.en = 0; if (nvme_ctrlr_set_cc(ctrlr, &cc)) { SPDK_ERRLOG("set_cc() failed\n"); - nvme_ctrlr_fail(ctrlr, false); return -EIO; } nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_DISABLE_WAIT_FOR_READY_0, ready_timeout_in_ms); @@ -2348,7 +2345,6 @@ nvme_ctrlr_process_init(struct spdk_nvme_ctrlr *ctrlr) default: assert(0); - nvme_ctrlr_fail(ctrlr, false); return -1; } @@ -2356,7 +2352,6 @@ init_timeout: if (ctrlr->state_timeout_tsc != NVME_TIMEOUT_INFINITE && spdk_get_ticks() > ctrlr->state_timeout_tsc) { SPDK_ERRLOG("Initialization timed out in state %d\n", ctrlr->state); - nvme_ctrlr_fail(ctrlr, false); return -1; } diff --git a/test/unit/lib/nvme/nvme.c/nvme_ut.c b/test/unit/lib/nvme/nvme.c/nvme_ut.c index 21414c58b..a4acc9196 100644 --- a/test/unit/lib/nvme/nvme.c/nvme_ut.c +++ b/test/unit/lib/nvme/nvme.c/nvme_ut.c @@ -43,6 +43,7 @@ DEFINE_STUB_V(nvme_ctrlr_proc_get_ref, (struct spdk_nvme_ctrlr *ctrlr)); DEFINE_STUB_V(nvme_ctrlr_proc_put_ref, (struct spdk_nvme_ctrlr *ctrlr)); +DEFINE_STUB_V(nvme_ctrlr_fail, (struct spdk_nvme_ctrlr *ctrlr, bool hotremove)); DEFINE_STUB(spdk_nvme_transport_available, bool, (enum spdk_nvme_transport_type trtype), true); /* return anything non-NULL, this won't be deferenced anywhere in this test */