Commit 3c96acb4 authored by Changpeng Liu's avatar Changpeng Liu Committed by Daniel Verkamp
Browse files

nvmf: fix double free of session structure when exit the NVMf process



Change-Id: Iea34ca82898e58633c6f7edd2ab8ff04f5484220
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 49e0054f
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -111,13 +111,14 @@ static void
spdk_nvmf_conn_do_work(void *arg)
{
	struct spdk_nvmf_conn *conn = arg;
	struct nvmf_session *session = conn->sess;

	/* process pending NVMe device completions */
	if (conn->sess) {
	if (session) {
		if (conn->type == CONN_TYPE_AQ) {
			nvmf_check_admin_completions(conn->sess);
			nvmf_check_admin_completions(session);
		} else {
			nvmf_check_io_completions(conn->sess);
			nvmf_check_io_completions(session);
		}
	}

@@ -130,6 +131,9 @@ spdk_nvmf_conn_do_work(void *arg)
	if (conn->state == CONN_STATE_EXITING ||
	    conn->state == CONN_STATE_FABRIC_DISCONNECT) {
		spdk_nvmf_conn_destruct(conn);
		if (session && (session->num_connections == 0)) {
			spdk_nvmf_session_destruct(session);
		}
	}
}

+0 −4
Original line number Diff line number Diff line
@@ -294,10 +294,6 @@ nvmf_disconnect(struct nvmf_session *session,
{
	session->num_connections--;
	TAILQ_REMOVE(&session->connections, conn, link);

	if (session->num_connections == 0 || conn->type == CONN_TYPE_AQ) {
		spdk_nvmf_session_destruct(session);
	}
}

static uint64_t