[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