Commit 452833ad authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

nvme/tcp: prevent recursive poll on disconnect



It is possible that disconnect is invoked from the
nvme_tcp_ctrlr_connect_qpair_poll, nvme_fabric_qpair_authenticate_poll
contexts, leading to -EAGAIN. In such cases, the state machine should
clean up fabric_poll_status on its own when the stack unwinds.

Change-Id: I1d4a0f63e9d1e509a9c7456837b95c3371bd5898
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26798


Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
parent 74bf930e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -450,7 +450,8 @@ nvme_tcp_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_
	 * and the qpair state was CONNECTING before the disconnect was invoked. That
	 * command was aborted by the socket close. To avoid leaking this status and dma_data,
	 * nvme_tcp_ctrlr_connect_qpair_poll is used to releases them. */
	if (qpair->fabric_poll_status != NULL) {
	if (qpair->fabric_poll_status &&
	    !(qpair->auth.flags.in_auth_poll || tqpair->flags.in_connect_poll)) {
		assert(qpair->fabric_poll_status->done);
		rc = nvme_tcp_ctrlr_connect_qpair_poll(qpair->ctrlr, qpair);
		assert(rc != -EAGAIN);