[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:44:15 UTC 2012


The following commit has been merged in the upstream-mnc branch:
commit e37940f9fc21d745cfad8be6a727532b94b028ef
Author: Mike Christie <michaelc at cs.wisc.edu>
Date:   Wed Mar 21 03:24:09 2012 -0500

    iscsi tools: check for loaded module before loading
    
    No need to run modprobe if the module is already loaded.

diff --git a/usr/iscsi_sysfs.c b/usr/iscsi_sysfs.c
index f56554e..123dde3 100644
--- a/usr/iscsi_sysfs.c
+++ b/usr/iscsi_sysfs.c
@@ -1150,6 +1150,23 @@ static uint32_t get_target_no_from_sid(uint32_t sid, int *err)
 
 }
 
+int iscsi_sysfs_is_transport_loaded(char *transport_name)
+{
+	struct iscsi_transport *t;
+
+	/* sync up kernel and userspace */
+	read_transports();
+
+	/* check if the transport is loaded and matches */
+	list_for_each_entry(t, &transports, list) {
+		if (t->handle && !strncmp(t->name, transport_name,
+					  ISCSI_TRANSPORT_NAME_MAXLEN))
+			return 1;
+	}
+
+	return 0;
+}
+
 struct iscsi_transport *iscsi_sysfs_get_transport_by_name(char *transport_name)
 {
 	struct iscsi_transport *t;
@@ -1157,8 +1174,7 @@ struct iscsi_transport *iscsi_sysfs_get_transport_by_name(char *transport_name)
 
 retry:
 	/* sync up kernel and userspace */
-	if (read_transports())
-		return NULL;
+	read_transports();
 
 	/* check if the transport is loaded and matches */
 	list_for_each_entry(t, &transports, list) {
diff --git a/usr/iscsi_sysfs.h b/usr/iscsi_sysfs.h
index bae52b0..2b15d78 100644
--- a/usr/iscsi_sysfs.h
+++ b/usr/iscsi_sysfs.h
@@ -88,6 +88,7 @@ extern struct iscsi_transport *iscsi_sysfs_get_transport_by_hba(uint32_t host_no
 extern struct iscsi_transport *iscsi_sysfs_get_transport_by_session(char *sys_session);
 extern struct iscsi_transport *iscsi_sysfs_get_transport_by_sid(uint32_t sid);
 extern struct iscsi_transport *iscsi_sysfs_get_transport_by_name(char *transport_name);
+extern int iscsi_sysfs_is_transport_loaded(char *transport_name);
 extern int iscsi_sysfs_session_supports_nop(int sid);
 extern int iscsi_sysfs_session_user_created(int sid);
 
diff --git a/usr/transport.c b/usr/transport.c
index 80216a2..236ce2b 100644
--- a/usr/transport.c
+++ b/usr/transport.c
@@ -226,6 +226,9 @@ int transport_load_kmod(char *transport_name)
 	else
 		cmdline[2] = transport_name;
 
+	if (iscsi_sysfs_is_transport_loaded(cmdline[2]))
+		return 0;
+
 	pid = fork();
 	if (pid == 0) {
 		if (execv("/sbin/modprobe", cmdline) < 0) {

-- 
Debian Open-iSCSI Packaging



More information about the Pkg-iscsi-maintainers mailing list