From c1db8b0b1a7545c9edf2b0b2328733c44ba4e8f1 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Mon, 5 May 2014 08:32:16 +0200 Subject: 95iscsi: Autodetect iSCSI firmware Some iSCSI initiator present firmware information in /sys/firmware/ibft or /sys/firmware/iscsi_bootX Whenever we detect one of those directories we should assume that the iSCSI devices should be activated. Signed-off-by: Pavel Wieczorkiewicz Signed-off-by: Hannes Reinecke --- modules.d/95iscsi/module-setup.sh | 16 ++++++++++++++++ modules.d/95iscsi/parse-iscsiroot.sh | 10 ++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh index 1b0f292..97e6e81 100755 --- a/modules.d/95iscsi/module-setup.sh +++ b/modules.d/95iscsi/module-setup.sh @@ -39,6 +39,22 @@ depends() { installkernel() { local _arch=$(uname -m) + install_ibft() { + # When iBFT / iscsi_boot is detected: + # - mark network as mandatory + # - specify firmware booting cmdline parameter + + for d in /sys/firmware/* ; do + if [ -d ${d}/initiator ] ; then + echo "rd.neednet=1" >> "${initdir}/etc/cmdline.d/95iscsi.conf" + echo "rd.iscsi.firmware=1" >> "${initdir}/etc/cmdline.d/95iscsi.conf" + fi + done + } + + # Detect iBFT and perform mandatory steps + install_ibft + instmods bnx2i qla4xxx cxgb3i cxgb4i be2iscsi hostonly="" instmods iscsi_tcp iscsi_ibft crc32c iscsi_boot_sysfs iscsi_module_filter() { diff --git a/modules.d/95iscsi/parse-iscsiroot.sh b/modules.d/95iscsi/parse-iscsiroot.sh index 4be9d56..a965cc6 100755 --- a/modules.d/95iscsi/parse-iscsiroot.sh +++ b/modules.d/95iscsi/parse-iscsiroot.sh @@ -59,11 +59,17 @@ if [ -n "$iscsiroot" ] ; then [ -z "$netroot" ] || [ "$netroot" = "iscsi" ] && netroot=iscsi:$iscsiroot fi +# Autodetect iSCSI firmware targets +if [ -z "$iscsiroot" ] ; then + modprobe -q iscsi_boot_sysfs + modprobe -q iscsi_ibft + [ -d /sys/firmware/ibft ] && iscsi_firmware="1" + [ -d /sys/firmware/iscsi_boot1 ] && iscsi_firmware="1" +fi + # iscsi_firmware does not need argument checking if [ -n "$iscsi_firmware" ] ; then netroot=${netroot:-iscsi:} - modprobe -q iscsi_boot_sysfs 2>/dev/null - modprobe -q iscsi_ibft initqueue --onetime --timeout "/sbin/iscsiroot dummy '$netroot' '$NEWROOT'" fi -- 1.8.5.2