diff --git a/etc/initd/initd.suse b/etc/initd/initd.suse index 6d4cbd8..ce9fa70 100644 --- a/etc/initd/initd.suse +++ b/etc/initd/initd.suse @@ -77,6 +77,39 @@ iscsi_logout_all_nodes() return ${RETVAL:-0} } +iscsi_umount_all_luns() +{ + local d m dev p s + + cat /proc/mounts | sed -ne '/^\/dev\/.*/p' | while read d m t o x; do + if [ "$m" = "/" ] ; then + continue; + fi + if [ -L "$d" ] ; then + d=$(readlink -f $d) + fi + dev=${d##/dev} + + if [ "${dev##/sd}" = "$dev" ] ; then + continue; + fi + p="/sys/block${dev%%[0-9]*}" + + if [ ! -d ${p} ] && [ ! -d ${p}/device ] ; then + continue; + fi + + s=$(cd -P ${p}/device && echo $PWD) + + case "$s" in + */session[0-9]*/*) + # This is an iSCSI device + umount "$m" + ;; + esac + done +} + iscsi_list_all_nodes() { TARGETS=$($ISCSIADM -m session | sed 's@\[[^:]*:\(.*\)\] .*@\1@g') @@ -110,6 +143,7 @@ case "$1" in fi ;; stop) + iscsi_umount_all_luns if iscsi_logout_all_nodes ; then killproc -KILL $DAEMON RETVAL=$? diff --git a/include/iscsi_if.h b/include/iscsi_if.h diff --git a/kernel/iscsi_tcp.c b/kernel/iscsi_tcp.c diff --git a/kernel/libiscsi.c b/kernel/libiscsi.c diff --git a/kernel/libiscsi.h b/kernel/libiscsi.h diff --git a/kernel/scsi_transport_iscsi.c b/kernel/scsi_transport_iscsi.c diff --git a/usr/discovery.c b/usr/discovery.c diff --git a/usr/initiator.c b/usr/initiator.c diff --git a/usr/initiator.h b/usr/initiator.h diff --git a/usr/iscsid.c b/usr/iscsid.c