Commit 141e989a authored by Naresh Gottumukkala's avatar Naresh Gottumukkala Committed by Tomasz Zawadzki
Browse files

nvmf/fc: Fix to handle deprecated cb_fn in spdk_nvmf_qpair_disconnect()



      Store callback context in fc_conn to be used later when qpair close
   is completed.

Change-Id: I36706df0a5261702b7828305011e9c7b9f48b0a7
Signed-off-by: default avatarAnil Veerabhadrappa <anil.veerabhadrappa@broadcom.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/18374


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent 65597a89
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2236,6 +2236,10 @@ _nvmf_fc_close_qpair(void *arg)
		}

		SPDK_ERRLOG("%s: Delete FC connection failed.\n", __func__);
	} else if (fc_conn->conn_state == SPDK_NVMF_FC_OBJECT_TO_BE_DELETED) {
		/* This is the case where deletion started from FC layer. */
		spdk_thread_send_msg(fc_ctx->qpair_thread, fc_conn->qpair_disconnect_cb_fn,
				     fc_conn->qpair_disconnect_ctx);
	}

	nvmf_fc_connection_delete_done_cb(fc_ctx);
+6 −2
Original line number Diff line number Diff line
@@ -330,6 +330,8 @@ nvmf_fc_ls_new_connection(struct spdk_nvmf_fc_association *assoc, uint16_t qid,
	fc_conn->conn_state = SPDK_NVMF_FC_OBJECT_CREATED;
	TAILQ_INIT(&fc_conn->in_use_reqs);
	TAILQ_INIT(&fc_conn->fused_waiting_queue);
	fc_conn->qpair_disconnect_cb_fn = NULL;
	fc_conn->qpair_disconnect_ctx = NULL;

	/* save target port trid in connection (for subsystem
	 * listener validation in fabric connect command)
@@ -1483,8 +1485,9 @@ nvmf_fc_poller_conn_abort_done(void *hwqp, int32_t status, void *cb_args)

			if (!conn_args->backend_initiated && (fc_conn->qpair.state != SPDK_NVMF_QPAIR_DEACTIVATING)) {
				/* disconnect qpair from nvmf controller */
				fc_conn->qpair_disconnect_cb_fn = nvmf_fc_disconnect_qpair_cb;
				fc_conn->qpair_disconnect_ctx = &conn_args->cb_info;
				spdk_nvmf_qpair_disconnect(&fc_conn->qpair, NULL, NULL);
				nvmf_fc_disconnect_qpair_cb(&conn_args->cb_info);
			} else {
				nvmf_fc_poller_api_perform_cb(&conn_args->cb_info, SPDK_NVMF_FC_POLLER_API_SUCCESS);
			}
@@ -1543,8 +1546,9 @@ nvmf_fc_poller_api_del_connection(void *arg)

		if (!conn_args->backend_initiated && (fc_conn->qpair.state != SPDK_NVMF_QPAIR_DEACTIVATING)) {
			/* disconnect qpair from nvmf controller */
			fc_conn->qpair_disconnect_cb_fn = nvmf_fc_disconnect_qpair_cb;
			fc_conn->qpair_disconnect_ctx = &conn_args->cb_info;
			spdk_nvmf_qpair_disconnect(&fc_conn->qpair, NULL, NULL);
			nvmf_fc_disconnect_qpair_cb(&conn_args->cb_info);
		} else {
			nvmf_fc_poller_api_perform_cb(&conn_args->cb_info, SPDK_NVMF_FC_POLLER_API_SUCCESS);
		}
+3 −0
Original line number Diff line number Diff line
@@ -192,6 +192,9 @@ struct spdk_nvmf_fc_nport {
 */
struct spdk_nvmf_fc_conn {
	struct spdk_nvmf_qpair qpair;
	nvmf_qpair_disconnect_cb qpair_disconnect_cb_fn;
	void *qpair_disconnect_ctx;

	struct spdk_nvme_transport_id trid;

	uint32_t s_id;