File 0306-95iscsi-set-rd.iscsi.firmware-for-qla4xxx-sessions.patch of Package dracut.6322

Index: dracut-037/modules.d/95iscsi/iscsiroot.sh
===================================================================
--- dracut-037.orig/modules.d/95iscsi/iscsiroot.sh
+++ dracut-037/modules.d/95iscsi/iscsiroot.sh
@@ -55,34 +55,44 @@ set_login_retries() {
 handle_firmware()
 {
     if ! [ -e /tmp/iscsistarted-firmware ]; then
-        local ipparam retries
+        local ifaces retry
 
+        # Depending on the 'ql4xdisablesysfsboot' qla4xxx
+        # will be autostarting sessions without presenting
+        # them via the firmware interface.
+        # In these cases 'iscsiadm -m fw' will fail, but
+        # the iSCSI sessions will still be present.
         if ! iscsistart -f; then
             warn "iscistart: Could not get list of targets from firmware."
-            return 1
-        fi
-        
-        #default to ip setup via ibft
-        ipparam=$(getarg ip)
-        if [ "$ipparam" = "ibft" ] || [ -z "$ipparam" ]; then 
-           iscsistart -N
-        fi
+        else
+            ifaces=( $(echo /sys/firmware/ibft/ethernet*) )
+            [ -f /tmp/session-retry ] || echo 1 > /tmp/session-retry
+            retry=$(cat /tmp/session-retry)
 
-        for p in $(getargs rd.iscsi.param -d iscsi_param); do
-	    iscsi_param="$iscsi_param --param $p"
-        done
-
-        #limit iscsistart login retries
-        if [[ ! "$iscsi_param" =~ "node.session.initial_login_retry_max" ]]; then 
-            set_login_retries
-            retries=$?
-            if [ $retries -gt 0 ]; then
-               iscsi_param="${iscsi_param% } --param node.session.initial_login_retry_max=$retries"   
+            for p in $(getargs rd.iscsi.param -d iscsi_param); do
+                iscsi_param="$iscsi_param --param $p"
+            done
+
+            #limit iscsistart login retries
+            if [[ ! "$iscsi_param" =~ "node.session.initial_login_retry_max" ]]; then
+                set_login_retries
+                retries=$?
+                if [ $retries -gt 0 ]; then
+                   iscsi_param="${iscsi_param% } --param node.session.initial_login_retry_max=$retries"
+                fi
             fi
-        fi
 
-        if ! iscsistart -b $iscsi_param; then
-            warn "'iscsistart -b $iscsi_param' failed"
+            if [ $retry -lt ${#ifaces[*]} ]; then
+                let retry++
+                echo $retry > /tmp/session-retry
+                return 1
+            fi
+
+            if ! iscsistart -b $iscsi_param; then
+                warn "'iscsistart -b $iscsi_param' failed"
+            else
+                need_shutdown
+            fi
         fi
 
         if [ -d /sys/class/iscsi_session ]; then
Index: dracut-037/modules.d/95iscsi/module-setup.sh
===================================================================
--- dracut-037.orig/modules.d/95iscsi/module-setup.sh
+++ dracut-037/modules.d/95iscsi/module-setup.sh
@@ -66,6 +66,7 @@ install_iscsiroot() {
             # qla4xxx flashnode session; skip iBFT discovery
             iscsi_initiator=$(cat /sys/class/iscsi_host/${iscsi_host}/initiatorname)
             echo "rd.iscsi.initiator=${iscsi_initiator}"
+            echo "rd.iscsi.firmware=1"
             return;
         fi
     done
openSUSE Build Service is sponsored by