Commit 1c733603 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Tomasz Zawadzki
Browse files

nvme/tcp: fix qpair poll_status memleak



If an admin qpair in CONNECTING state gets disconnected due to an error,
its poll_status (allocated in nvme_fabric_qpair_connect_async()) may not
be freed. Add a call to nvme_tcp_ctrlr_connect_qpair_poll() after
disconnect, when requests have beeen aborted and the poll_status is done
- it will be freed in nvme_fabric_qpair_connect_poll().

Fixes #3207

Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Change-Id: I7147b6f341a9b982d00d66a50d4b572ed36b8672
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22001


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 516310a5
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2229,7 +2229,14 @@ fail:
	qpair->transport_failure_reason = SPDK_NVME_QPAIR_FAILURE_UNKNOWN;

	if (nvme_qpair_is_admin_queue(qpair)) {
		enum nvme_qpair_state state_prev = nvme_qpair_get_state(qpair);

		nvme_transport_ctrlr_disconnect_qpair(qpair->ctrlr, qpair);

		if (state_prev == NVME_QPAIR_CONNECTING && qpair->poll_status != NULL) {
			/* Needed to free the poll_status */
			nvme_tcp_ctrlr_connect_qpair_poll(qpair->ctrlr, qpair);
		}
	} else {
		nvme_ctrlr_disconnect_qpair(qpair);
	}