Commit f338b43a authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Jim Harris
Browse files

iscsi: Use cached portal group tag of connection widely



pg_tag was added to struct spdk_iscsi_conn long ago but had not
been used yet. Portal group and its portals can be removed
dynamically even if there is any binded connection. Using cached
pg_tag will avoid potential errors.

Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ic7a96ef97c3cab7e5a58aa7f439364b53694a1e4
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463874


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 23eb38f1
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -1505,7 +1505,7 @@ iscsi_op_login_session_normal(struct spdk_iscsi_conn *conn,
	conn->target = target;
	conn->dev = target->dev;
	conn->target_port = spdk_scsi_dev_find_port_by_id(target->dev,
			    conn->portal->group->tag);
			    conn->pg_tag);

	rc = iscsi_op_login_check_session(conn, rsp_pdu,
					  initiator_port_name, cid);
@@ -1719,13 +1719,13 @@ iscsi_op_login_set_target_info(struct spdk_iscsi_conn *conn,
		}
	}
	snprintf(buf, sizeof buf, "%s:%s,%d", portal->host, portal->port,
		 portal->group->tag);
		 conn->pg_tag);
	rc = spdk_iscsi_param_set(conn->sess->params, "TargetAddress", buf);
	if (rc < 0) {
		SPDK_ERRLOG("iscsi_param_set() failed\n");
		return SPDK_ISCSI_LOGIN_ERROR_PARAMETER;
	}
	snprintf(buf, sizeof buf, "%d", portal->group->tag);
	snprintf(buf, sizeof buf, "%d", conn->pg_tag);
	rc = spdk_iscsi_param_set(conn->sess->params, "TargetPortalGroupTag", buf);
	if (rc < 0) {
		SPDK_ERRLOG("iscsi_param_set() failed\n");
@@ -2082,7 +2082,7 @@ iscsi_op_login_notify_session_info(struct spdk_iscsi_conn *conn,
			      " CID=%u, HeaderDigest=%s, DataDigest=%s\n",
			      conn->initiator_name, conn->initiator_addr,
			      conn->target->name, conn->target->num,
			      conn->portal->host, conn->portal->port, conn->portal->group->tag,
			      conn->portal->host, conn->portal->port, conn->pg_tag,
			      conn->sess->isid, conn->sess->tsih, conn->cid,
			      (spdk_iscsi_param_eq_val(conn->params, "HeaderDigest", "CRC32C")
			       ? "on" : "off"),
@@ -2094,7 +2094,7 @@ iscsi_op_login_notify_session_info(struct spdk_iscsi_conn *conn,
			      " (%s:%s,%d), ISID=%"PRIx64", TSIH=%u,"
			      " CID=%u, HeaderDigest=%s, DataDigest=%s\n",
			      conn->initiator_name, conn->initiator_addr,
			      conn->portal->host, conn->portal->port, conn->portal->group->tag,
			      conn->portal->host, conn->portal->port, conn->pg_tag,
			      conn->sess->isid, conn->sess->tsih, conn->cid,
			      (spdk_iscsi_param_eq_val(conn->params, "HeaderDigest", "CRC32C")
			       ? "on" : "off"),
@@ -4759,7 +4759,7 @@ create_iscsi_sess(struct spdk_iscsi_conn *conn,

	pthread_mutex_unlock(&g_spdk_iscsi.mutex);

	sess->tag = conn->portal->group->tag;
	sess->tag = conn->pg_tag;

	sess->conns = calloc(sess->MaxConnections, sizeof(*sess->conns));
	if (!sess->conns) {
@@ -4909,7 +4909,7 @@ append_iscsi_sess(struct spdk_iscsi_conn *conn,
		SPDK_ERRLOG("spdk_get_iscsi_sess_by_tsih failed\n");
		return ISCSI_LOGIN_CONN_ADD_FAIL;
	}
	if ((conn->portal->group->tag != sess->tag) ||
	if ((conn->pg_tag != sess->tag) ||
	    (strcasecmp(initiator_port_name, spdk_scsi_port_get_name(sess->initiator_port)) != 0) ||
	    (conn->target != sess->target)) {
		/* no match */
+1 −1
Original line number Diff line number Diff line
@@ -268,7 +268,7 @@ spdk_iscsi_tgt_node_access(struct spdk_iscsi_conn *conn,
denied:
	SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "access denied from %s (%s) to %s (%s:%s,%d)\n",
		      iqn, addr, target->name, conn->portal->host,
		      conn->portal->port, conn->portal->group->tag);
		      conn->portal->port, conn->pg_tag);
	return false;
}