From f338b43a86dd81277648e0d2bac3bd20e25b26db Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Thu, 1 Aug 2019 17:45:50 +0900 Subject: [PATCH] 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: Shuhei Matsumoto Change-Id: Ic7a96ef97c3cab7e5a58aa7f439364b53694a1e4 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/463874 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Ben Walker --- lib/iscsi/iscsi.c | 14 +++++++------- lib/iscsi/tgt_node.c | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index 61652e9d0..eb9fe6bd6 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -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 */ diff --git a/lib/iscsi/tgt_node.c b/lib/iscsi/tgt_node.c index c4c4ad0c6..eff393c93 100644 --- a/lib/iscsi/tgt_node.c +++ b/lib/iscsi/tgt_node.c @@ -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; }