|
|
712866 |
From 6c7c8d8a071694efd0c7e450fa78e71224a8ced4 Mon Sep 17 00:00:00 2001
|
|
|
712866 |
From: Harald Hoyer <harald@redhat.com>
|
|
|
712866 |
Date: Wed, 22 Jan 2014 17:05:22 +0100
|
|
|
712866 |
Subject: [PATCH] iscsi: more iscsiroot fixes
|
|
|
712866 |
|
|
|
712866 |
handle iscsiroot with firmware more gracefully
|
|
|
712866 |
---
|
|
|
712866 |
modules.d/95iscsi/iscsiroot.sh | 68 +++++++++++++++++++++++++-----------
|
|
|
712866 |
modules.d/95iscsi/parse-iscsiroot.sh | 6 ++--
|
|
|
712866 |
2 files changed, 50 insertions(+), 24 deletions(-)
|
|
|
712866 |
|
|
|
712866 |
diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
|
|
|
5c6c2a |
index 156003c0..68687102 100755
|
|
|
712866 |
--- a/modules.d/95iscsi/iscsiroot.sh
|
|
|
712866 |
+++ b/modules.d/95iscsi/iscsiroot.sh
|
|
|
712866 |
@@ -31,36 +31,45 @@ iroot="$2"
|
|
|
712866 |
# If it's not iscsi we don't continue
|
|
|
712866 |
[ "${iroot%%:*}" = "iscsi" ] || exit 1
|
|
|
712866 |
|
|
|
712866 |
-iroot=${iroot#iscsi:}
|
|
|
712866 |
+iroot=${iroot#iscsi}
|
|
|
712866 |
+iroot=${iroot#:}
|
|
|
712866 |
|
|
|
712866 |
# XXX modprobe crc32c should go in the cmdline parser, but I haven't yet
|
|
|
712866 |
# figured out a way how to check whether this is built-in or not
|
|
|
712866 |
modprobe crc32c 2>/dev/null
|
|
|
712866 |
|
|
|
712866 |
-[ -e /sys/module/bnx2i ] && iscsiuio
|
|
|
712866 |
-
|
|
|
712866 |
-if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
|
|
|
712866 |
- for p in $(getargs rd.iscsi.param -d iscsi_param); do
|
|
|
712866 |
- iscsi_param="$iscsi_param --param $p"
|
|
|
712866 |
- done
|
|
|
712866 |
+if [ -e /sys/module/bnx2i ] && ! [ -e /tmp/iscsiuio-started ]; then
|
|
|
712866 |
+ iscsiuio
|
|
|
712866 |
+ > /tmp/iscsiuio-started
|
|
|
712866 |
+fi
|
|
|
712866 |
|
|
|
712866 |
+handle_firmware()
|
|
|
712866 |
+{
|
|
|
712866 |
if ! [ -e /tmp/iscsistarted-firmware ]; then
|
|
|
712866 |
- if ! iscsistart -f | vinfo; then
|
|
|
712866 |
+ if ! iscsistart -f; then
|
|
|
712866 |
warn "iscistart: Could not get list of targets from firmware."
|
|
|
712866 |
- exit 1
|
|
|
712866 |
+ return 1
|
|
|
712866 |
fi
|
|
|
712866 |
|
|
|
712866 |
- if ! iscsistart -b $iscsi_param 2>&1 | vinfo; then
|
|
|
712866 |
+ for p in $(getargs rd.iscsi.param -d iscsi_param); do
|
|
|
712866 |
+ iscsi_param="$iscsi_param --param $p"
|
|
|
712866 |
+ done
|
|
|
712866 |
+
|
|
|
712866 |
+ if ! iscsistart -b $iscsi_param; then
|
|
|
712866 |
warn "\`iscsistart -b $iscsi_param\ยด failed"
|
|
|
712866 |
- exit 1
|
|
|
712866 |
fi
|
|
|
712866 |
- echo 'started' > "/tmp/iscsistarted-iscsi"
|
|
|
712866 |
- echo 'started' > "/tmp/iscsistarted-firmware"
|
|
|
712866 |
+
|
|
|
712866 |
+ if [ -d /sys/class/iscsi_session ]; then
|
|
|
712866 |
+ echo 'started' > "/tmp/iscsistarted-iscsi"
|
|
|
712866 |
+ echo 'started' > "/tmp/iscsistarted-firmware"
|
|
|
712866 |
+ else
|
|
|
712866 |
+ return 1
|
|
|
712866 |
+ fi
|
|
|
712866 |
+
|
|
|
712866 |
need_shutdown
|
|
|
712866 |
fi
|
|
|
712866 |
-
|
|
|
712866 |
- [ "$netif" = dummy ] && exit 0
|
|
|
712866 |
-fi
|
|
|
712866 |
+ return 0
|
|
|
712866 |
+}
|
|
|
712866 |
|
|
|
712866 |
|
|
|
712866 |
handle_netroot()
|
|
|
712866 |
@@ -171,21 +180,38 @@ handle_netroot()
|
|
|
712866 |
|
|
|
712866 |
netroot_enc=$(str_replace "$1" '/' '\2f')
|
|
|
712866 |
echo 'started' > "/tmp/iscsistarted-iscsi:${netroot_enc}"
|
|
|
712866 |
-
|
|
|
712866 |
}
|
|
|
712866 |
|
|
|
712866 |
+ret=0
|
|
|
712866 |
+
|
|
|
712866 |
# loop over all netroot parameter
|
|
|
712866 |
if getarg netroot; then
|
|
|
712866 |
for nroot in $(getargs netroot); do
|
|
|
712866 |
- [ "${netroot%%:*}" = "iscsi" ] || continue
|
|
|
712866 |
- handle_netroot ${nroot##iscsi:}
|
|
|
712866 |
+ [ "${nroot%%:*}" = "iscsi" ] || continue
|
|
|
712866 |
+ nroot="${nroot##iscsi:}"
|
|
|
712866 |
+ if [ -n "$nroot" ]; then
|
|
|
712866 |
+ handle_netroot "$nroot"
|
|
|
712866 |
+ ret=$(($ret + $?))
|
|
|
712866 |
+ fi
|
|
|
712866 |
done
|
|
|
712866 |
+ if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
|
|
|
712866 |
+ handle_firmware
|
|
|
712866 |
+ ret=$(($ret + $?))
|
|
|
712866 |
+ fi
|
|
|
712866 |
else
|
|
|
712866 |
- handle_netroot $iroot
|
|
|
712866 |
+ if [ -n "$iroot" ]; then
|
|
|
712866 |
+ handle_netroot "$iroot"
|
|
|
712866 |
+ ret=$?
|
|
|
712866 |
+ else
|
|
|
712866 |
+ if getargbool 0 rd.iscsi.firmware -d -y iscsi_firmware ; then
|
|
|
712866 |
+ handle_firmware
|
|
|
712866 |
+ ret=$?
|
|
|
712866 |
+ fi
|
|
|
712866 |
+ fi
|
|
|
712866 |
fi
|
|
|
712866 |
|
|
|
712866 |
need_shutdown
|
|
|
712866 |
|
|
|
712866 |
# now we have a root filesystem somewhere in /dev/sda*
|
|
|
712866 |
# let the normal block handler handle root=
|
|
|
712866 |
-exit 0
|
|
|
712866 |
+exit $ret
|
|
|
712866 |
diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh
|
|
|
5c6c2a |
index e463addb..4be9d561 100755
|
|
|
712866 |
--- a/modules.d/95iscsi/parse-iscsiroot.sh
|
|
|
712866 |
+++ b/modules.d/95iscsi/parse-iscsiroot.sh
|
|
|
712866 |
@@ -61,10 +61,10 @@ fi
|
|
|
712866 |
|
|
|
712866 |
# iscsi_firmware does not need argument checking
|
|
|
712866 |
if [ -n "$iscsi_firmware" ] ; then
|
|
|
712866 |
- netroot=${netroot:-iscsi}
|
|
|
712866 |
+ netroot=${netroot:-iscsi:}
|
|
|
712866 |
modprobe -q iscsi_boot_sysfs 2>/dev/null
|
|
|
712866 |
modprobe -q iscsi_ibft
|
|
|
712866 |
- initqueue --settled /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
|
|
|
712866 |
+ initqueue --onetime --timeout "/sbin/iscsiroot dummy '$netroot' '$NEWROOT'"
|
|
|
712866 |
fi
|
|
|
712866 |
|
|
|
712866 |
# If it's not iscsi we don't continue
|
|
|
712866 |
@@ -88,7 +88,7 @@ fi
|
|
|
712866 |
|
|
|
712866 |
if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then
|
|
|
712866 |
if ! getargbool 1 rd.neednet >/dev/null || ! getarg "ip="; then
|
|
|
712866 |
- initqueue --onetime --settled /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
|
|
|
712866 |
+ initqueue --onetime --settled "/sbin/iscsiroot dummy '$netroot' '$NEWROOT'"
|
|
|
712866 |
fi
|
|
|
712866 |
fi
|
|
|
712866 |
|