On 06/15/2015 10:53 AM, Harald Hoyer wrote:
On 15.06.2015 11:51, Harald Hoyer wrote:
On 15.06.2015 11:34, Ross Lagerwall wrote:
ping!
On 05/14/2015 09:30 AM, Ross Lagerwall wrote:
If multiple targets are specified in the ibft, iscsistart will log into
all of them, possibly using multiple interfaces. Since iscsistart is run
indirectly from ifup, require that all interfaces are up before actually
logging into the targets.
---
modules.d/95iscsi/iscsiroot.sh | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/modules.d/95iscsi/iscsiroot.sh b/modules.d/95iscsi/iscsiroot.sh
index 1de6fb7..b9e99cb 100755
--- a/modules.d/95iscsi/iscsiroot.sh
+++ b/modules.d/95iscsi/iscsiroot.sh
@@ -45,6 +45,11 @@ fi
handle_firmware()
{
+ # iscsistart -b may use multiple interfaces so only run when
+ # all are ready.
+ type all_ifaces_up >/dev/null 2>&1 || . /lib/net-lib.sh
+ all_ifaces_up || return 1
+
if ! [ -e /tmp/iscsistarted-firmware ]; then
if ! iscsistart -f; then
warn "iscistart: Could not get list of targets from firmware."
I would love to do that, but users want to have "iscsistart -b" executed
regardless of faulty network configuration of interfaces, which are not part of
the critical path for root mounting.
So, if you add a "iscsistart -b" in the timeout hook (which is removed, if once
succeeded in the normal path), then I guess it will be fine for all.
That already effectively happens in the existing dracut code due to this
line:
initqueue --onetime --timeout "/sbin/iscsiroot dummy '$netroot' '$NEWROOT'"
But the problem is that when multiple NICs are specified in the ibft,
"iscsistart -b" hangs for something like 15 minutes trying to use an
interface that isn't up so so letting it fallback to the timeout hook
doesn't really work for me.
What about adding the following oneliner to the above patch (untested)?
8<-------------------------
diff --git a/modules.d/95iscsi/parse-iscsiroot.sh
b/modules.d/95iscsi/parse-iscsiroot.sh
index 52f7a97..f1bd25f 100755
--- a/modules.d/95iscsi/parse-iscsiroot.sh
+++ b/modules.d/95iscsi/parse-iscsiroot.sh
@@ -62,7 +62,7 @@ if [ -n "$iscsi_firmware" ] ; then
[ -z "$netroot" ] && netroot=iscsi:
modprobe -b -q iscsi_boot_sysfs 2>/dev/null
modprobe -b -q iscsi_ibft
- initqueue --onetime --timeout /sbin/iscsiroot dummy "$netroot"
"$NEWROOT"
+ initqueue --onetime --finished /sbin/iscsiroot dummy "$netroot"
"$NEWROOT"
fi
# If it's not iscsi we don't continue
8<-------------------------
So if you have a faulty NIC configuration, you still end up running
iscsistart -b eventually.
And if you've already run iscsistart -b (e.g. in the usual case), then
the "/tmp/iscsistarted-firmware" flag will prevent you from running it
again.
Oh, and ideally I want to see systemd units for iscsistart, or move to iscsid
completely.
And iscsid/iscistart would just handle all netlink events.
Of course :-)
--
Ross Lagerwall
--
To unsubscribe from this list: send the line "unsubscribe initramfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html