[Pkg-iscsi-maintainers] [SCM] Debian Open-iSCSI Packaging branch, upstream-mnc, updated. 2.0-872-193-gde2c0e7

Mike Christie michaelc at cs.wisc.edu
Sat Apr 7 15:43:29 UTC 2012


The following commit has been merged in the upstream-mnc branch:
commit 2ec7d01db8193268ce5271d813875fb6684fced0
Author: Jim Ramsay <jim_ramsay at dell.com>
Date:   Fri Jun 3 09:21:22 2011 -0400

    Add specific session information to session_rec_t
    
    This is populated by iscsiadm in 'session' mode when the '-r' options is
    given, and passed along in the session_rec_t.  It limits the operation
    of exec_node_op to only the specific session specified by the user.
    
    This is a prerequisite for "multiple sessions per iface recond".
    
    Signed-off-by: Jim Ramsay <jim_ramsay at dell.com>

diff --git a/usr/config.h b/usr/config.h
index 5cb4d56..dcc862d 100644
--- a/usr/config.h
+++ b/usr/config.h
@@ -193,6 +193,8 @@ typedef struct session_rec {
 	struct iscsi_session_timeout_config	timeo;
 	struct iscsi_error_timeout_config	err_timeo;
 	struct iscsi_session_operational_config	iscsi;
+	struct session_info			*info;
+	unsigned                                sid;
 } session_rec_t;
 
 #define ISCSI_TRANSPORT_NAME_MAXLEN 16
diff --git a/usr/idbm.c b/usr/idbm.c
index a73b410..4965819 100644
--- a/usr/idbm.c
+++ b/usr/idbm.c
@@ -2412,6 +2412,8 @@ void idbm_node_setup_defaults(node_rec_t *rec)
 	rec->session.err_timeo.tgt_reset_timeout = DEF_TGT_RESET_TIMEO;
 	rec->session.err_timeo.host_reset_timeout = DEF_HOST_RESET_TIMEO;
 	rec->session.timeo.replacement_timeout = DEF_REPLACEMENT_TIMEO;
+	rec->session.info = NULL;
+	rec->session.sid = 0;
 	idbm_setup_session_defaults(&rec->session.iscsi);
 
 	for (i=0; i<ISCSI_CONN_MAX; i++) {
@@ -2439,7 +2441,8 @@ idbm_find_rec_in_list(struct list_head *rec_list, char *targetname, char *addr,
 	struct node_rec *rec;
 
 	list_for_each_entry(rec, rec_list, list) {
-		if (__iscsi_match_session(rec, targetname, addr, port, iface))
+		if (__iscsi_match_session(rec, targetname, addr, port, iface,
+					  MATCH_ANY_SID))
 			return rec;
 	}
 
diff --git a/usr/initiator.c b/usr/initiator.c
index 5eb05b5..c004406 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -1611,7 +1611,8 @@ static iscsi_session_t* session_find_by_rec(node_rec_t *rec)
 			if (__iscsi_match_session(rec, session->nrec.name,
 					 session->nrec.conn[0].address,
 					 session->nrec.conn[0].port,
-					 &session->nrec.iface))
+					 &session->nrec.iface,
+					 MATCH_ANY_SID))
 				return session;
 		}
 	}
diff --git a/usr/iscsi_util.c b/usr/iscsi_util.c
index 4481294..a99db9f 100644
--- a/usr/iscsi_util.c
+++ b/usr/iscsi_util.c
@@ -33,6 +33,7 @@
 #include "iscsi_settings.h"
 #include "iface.h"
 #include "session_info.h"
+#include "iscsi_util.h"
 
 void daemon_init(void)
 {
@@ -285,24 +286,28 @@ free_res1:
 }
 
 int __iscsi_match_session(node_rec_t *rec, char *targetname,
-			  char *address, int port, struct iface_rec *iface)
+			  char *address, int port, struct iface_rec *iface,
+			  unsigned sid)
 {
 	if (!rec) {
 		log_debug(6, "no rec info to match\n");
 		return 1;
 	}
 
-	log_debug(6, "match session [%s,%s,%d][%s %s,%s,%s]",
+	log_debug(6, "match session [%s,%s,%d][%s %s,%s,%s]:%u",
 		  rec->name, rec->conn[0].address, rec->conn[0].port,
 		  rec->iface.name, rec->iface.transport_name,
-		  rec->iface.hwaddress, rec->iface.ipaddress);
+		  rec->iface.hwaddress, rec->iface.ipaddress,
+		  rec->session.sid);
 
 	if (iface)
-		log_debug(6, "to [%s,%s,%d][%s %s,%s,%s]",
+		log_debug(6, "to [%s,%s,%d][%s %s,%s,%s]:%u",
 			  targetname, address, port, iface->name,
 			  iface->transport_name, iface->hwaddress,
-			  iface->ipaddress);
+			  iface->ipaddress, sid);
 
+	if (rec->session.sid && sid && rec->session.sid != sid)
+		return 0;
 
 	if (strlen(rec->name) && strcmp(rec->name, targetname))
 		return 0;
@@ -323,5 +328,6 @@ int iscsi_match_session(void *data, struct session_info *info)
 {
 	return __iscsi_match_session(data, info->targetname,
 				     info->persistent_address,
-				     info->persistent_port, &info->iface);
+				     info->persistent_port, &info->iface,
+				     info->sid);
 }
diff --git a/usr/iscsi_util.h b/usr/iscsi_util.h
index 87b2bb2..9428867 100644
--- a/usr/iscsi_util.h
+++ b/usr/iscsi_util.h
@@ -16,7 +16,10 @@ extern char *str_to_ipport(char *str, int *port, int *tgpt);
 extern int iscsi_match_session(void *data, struct session_info *info);
 extern int __iscsi_match_session(struct node_rec *rec, char *targetname,
 				 char *address, int port,
-				 struct iface_rec *iface);
+				 struct iface_rec *iface,
+				 unsigned sid);
+
+#define MATCH_ANY_SID 0
 
 extern char *strstrip(char *s);
 extern char *cfg_get_string_param(char *pathname, const char *key);
diff --git a/usr/iscsiadm.c b/usr/iscsiadm.c
index e3a6b81..937b99e 100644
--- a/usr/iscsiadm.c
+++ b/usr/iscsiadm.c
@@ -292,7 +292,12 @@ for_each_session(struct node_rec *rec, iscsi_sysfs_session_op_fn *fn)
 {
 	int err, num_found = 0;
 
-	err = iscsi_sysfs_for_each_session(rec, &num_found, fn);
+	if (rec && rec->session.info) {
+		num_found = 1;
+		err = fn(rec, rec->session.info);
+	} else {
+		err = iscsi_sysfs_for_each_session(rec, &num_found, fn);
+	}
 	if (err)
 		log_error("Could not execute operation on all sessions: %s",
 			  iscsi_err_to_str(err));
@@ -465,7 +470,7 @@ static int rec_match_fn(void *data, node_rec_t *rec)
 
 	if (!__iscsi_match_session(op_data->match_rec, rec->name,
 				   rec->conn[0].address, rec->conn[0].port,
-				   &rec->iface))
+				   &rec->iface, rec->session.sid))
 		return -1;
 	return op_data->fn(op_data->data, rec);
 }
@@ -850,7 +855,8 @@ static int delete_stale_rec(void *data, struct node_rec *rec)
 					  new_rec->name,
 					  new_rec->conn[0].address,
 					  new_rec->conn[0].port,
-					  &new_rec->iface))
+					  &new_rec->iface,
+					  new_rec->session.sid))
 			return -1;
 	}
 	/* if there is a error we can continue on */
@@ -1239,9 +1245,10 @@ static int exec_node_op(int op, int do_login, int do_logout,
 	struct db_set_param set_param;
 
 	if (rec)
-		log_debug(2, "%s: %s:%s node [%s,%s,%d]", __FUNCTION__,
+		log_debug(2, "%s: %s:%s node [%s,%s,%d] sid %u", __FUNCTION__,
 			  rec->iface.transport_name, rec->iface.name,
-			  rec->name, rec->conn[0].address, rec->conn[0].port);
+			  rec->name, rec->conn[0].address, rec->conn[0].port,
+			  rec->session.sid);
 
 	if (op == OP_NEW) {
 		rc = add_static_recs(rec);
@@ -2144,6 +2151,8 @@ main(int argc, char **argv)
 				rc = ISCSI_ERR_NOMEM;
 				goto free_info;
 			}
+			rec->session.info = info;
+			rec->session.sid = sid;
 
 			/* drop down to node ops */
 			rc = exec_node_op(op, do_login, do_logout, do_show,

-- 
Debian Open-iSCSI Packaging



More information about the Pkg-iscsi-maintainers mailing list