Commit 379ebca0 authored by Ziye Yang's avatar Ziye Yang Committed by Daniel Verkamp
Browse files

nvmf,rdma: only call spdk_nvmf_rdma_conn_destroy to free rdma_conn



Previously, we mixed use free and spdk_nvmf_rdma_conn_destroy to
free allocated spdk_nvmf_rdma_conn structure, which sounds not
exactly free all the resources.

Change-Id: I2917b442c34d63ba5c014add58f429ae4b831595
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
parent 769468fc
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ spdk_nvmf_rdma_conn_create(struct rdma_cm_id *id, struct ibv_comp_channel *chann
		SPDK_ERRLOG("Unable to create completion queue\n");
		SPDK_ERRLOG("Completion Channel: %p Id: %p Verbs: %p\n", channel, id, id->verbs);
		SPDK_ERRLOG("Errno %d: %s\n", errno, strerror(errno));
		free(rdma_conn);
		spdk_nvmf_rdma_conn_destroy(rdma_conn);
		return NULL;
	}

@@ -691,7 +691,6 @@ nvmf_rdma_connect(struct rdma_cm_event *event)
	SPDK_TRACELOG(SPDK_TRACE_RDMA, "Final Negotiated Queue Depth: %d R/W Depth: %d\n",
		      max_queue_depth, max_rw_depth);


	/* Init the NVMf rdma transport connection */
	rdma_conn = spdk_nvmf_rdma_conn_create(event->id, addr->comp_channel, max_queue_depth,
					       max_rw_depth);
@@ -700,10 +699,6 @@ nvmf_rdma_connect(struct rdma_cm_event *event)
		goto err1;
	}

	/* Add this RDMA connection to the global list until a CONNECT capsule
	 * is received. */
	TAILQ_INSERT_TAIL(&g_pending_conns, rdma_conn, link);

	accept_data.recfmt = 0;
	accept_data.crqsize = max_queue_depth;
	ctrlr_event_data = *rdma_param;
@@ -717,18 +712,24 @@ nvmf_rdma_connect(struct rdma_cm_event *event)
	rc = rdma_accept(event->id, &ctrlr_event_data);
	if (rc) {
		SPDK_ERRLOG("Error on rdma_accept\n");
		goto err1;
		goto err2;
	}
	SPDK_TRACELOG(SPDK_TRACE_RDMA, "Sent back the accept\n");

	/* Add this RDMA connection to the global list until a CONNECT capsule
	 * is received. */
	TAILQ_INSERT_TAIL(&g_pending_conns, rdma_conn, link);

	return 0;

err2:
	spdk_nvmf_rdma_conn_destroy(rdma_conn);

err1: {
		struct spdk_nvmf_rdma_reject_private_data rej_data;

		rej_data.status.sc = sts;
		rdma_reject(event->id, &ctrlr_event_data, sizeof(rej_data));
		free(rdma_conn);
	}
err0:
	return -1;