diff --git a/include/spdk/nvmf_transport.h b/include/spdk/nvmf_transport.h index ef041cc43..d3597d3f7 100644 --- a/include/spdk/nvmf_transport.h +++ b/include/spdk/nvmf_transport.h @@ -123,6 +123,7 @@ struct spdk_nvmf_qpair { uint16_t qid; uint16_t sq_head; uint16_t sq_head_max; + bool connect_received; bool disconnect_started; struct spdk_nvmf_request *first_fused_req; diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 4c3e2ca1c..6f9b61d79 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -727,6 +727,7 @@ _nvmf_ctrlr_connect(struct spdk_nvmf_request *req) qpair->sq_head_max = cmd->sqsize; qpair->qid = cmd->qid; + qpair->connect_received = true; if (0 == qpair->qid) { qpair->group->stat.admin_qpairs++; diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index dc00ddca9..1658d6d5a 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -1046,7 +1046,7 @@ _nvmf_qpair_destroy(void *ctx, int status) assert(qpair->state == SPDK_NVMF_QPAIR_DEACTIVATING); qpair_ctx->qid = qpair->qid; - if (ctrlr) { + if (qpair->connect_received) { if (0 == qpair->qid) { assert(qpair->group->stat.current_admin_qpairs > 0); qpair->group->stat.current_admin_qpairs--; @@ -1054,7 +1054,9 @@ _nvmf_qpair_destroy(void *ctx, int status) assert(qpair->group->stat.current_io_qpairs > 0); qpair->group->stat.current_io_qpairs--; } + } + if (ctrlr) { sgroup = &qpair->group->sgroups[ctrlr->subsys->id]; TAILQ_FOREACH_SAFE(req, &sgroup->queued, link, tmp) { if (req->qpair == qpair) {