diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 5c0247a35..0f5b5d16e 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -668,9 +668,6 @@ spdk_nvmf_handle_disconnect(spdk_event_t event) struct spdk_nvmf_conn *conn = spdk_event_get_arg2(event); nvmf_disconnect(session, conn); - if (session && session->num_connections == 0) { - spdk_nvmf_session_destruct(session); - } } static int diff --git a/lib/nvmf/session.c b/lib/nvmf/session.c index 3ab6c6451..00b2c31e7 100644 --- a/lib/nvmf/session.c +++ b/lib/nvmf/session.c @@ -168,7 +168,7 @@ spdk_nvmf_session_destruct(struct nvmf_session *session) struct spdk_nvmf_conn *conn = TAILQ_FIRST(&session->connections); TAILQ_REMOVE(&session->connections, conn, link); - nvmf_disconnect(conn->sess, conn); + session->num_connections--; conn->transport->conn_fini(conn); } @@ -313,6 +313,11 @@ nvmf_disconnect(struct nvmf_session *session, { session->num_connections--; TAILQ_REMOVE(&session->connections, conn, link); + conn->transport->conn_fini(conn); + + if (session->num_connections == 0) { + spdk_nvmf_session_destruct(session); + } } static uint64_t