]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fcoe/fcoe-edd.sh: cleanup the script
authorHarald Hoyer <harald@redhat.com>
Fri, 3 Jul 2015 11:52:32 +0000 (13:52 +0200)
committerHarald Hoyer <harald@redhat.com>
Wed, 11 Nov 2015 14:45:14 +0000 (15:45 +0100)
- check if modprobe was successful
- add a timeout for /sys/firmware/edd
- only remove the module, if it was loaded by the script

(cherry picked from commit 34203d03c0d43aa0aed12988d2719455e80eae54)

modules.d/95fcoe/fcoe-edd.sh

index fb3dcd776d94c359d75f00ef7f388d5f37e1430c..3b07ad3c667221c7e340eff7da4366a9f1131758 100755 (executable)
@@ -1,36 +1,54 @@
 #!/bin/sh
 
-dcb=$1
+dcb="$1"
 
-if ! [ -d /sys/firmware/edd ]; then
-    modprobe edd
-    while ! [ -d /sys/firmware/edd ]; do sleep 0.1; done
-fi
+_modprobe_r_edd="0"
+
+check_edd() {
+    local cnt=0
+
+    [ -d /sys/firmware/edd ] && return 0
+
+    _modprobe_r_edd="1"
+    modprobe edd || return $?
+
+    while [ $cnt -lt 600 ]; do
+        [ -d /sys/firmware/edd ] && return 0
+        cnt=$(($cnt+1))
+        sleep 0.1
+    done
+    return 1
+}
+
+check_edd || exit 1
 
 for disk in /sys/firmware/edd/int13_*; do
-    [ -d $disk ] || continue
-    if [ -e ${disk}/pci_dev/driver ]; then
-           driver=`readlink ${disk}/pci_dev/driver`
+    [ -d "$disk" ] || continue
+    if [ -e "${disk}/pci_dev/driver" ]; then
+           driver=$(readlink "${disk}/pci_dev/driver")
            driver=${driver##*/}
     fi
     # i40e uses dev_port 1 for a virtual fcoe function
     if [ "${driver}" == "i40e" ]; then
            dev_port=1
     fi
-    for nic in ${disk}/pci_dev/net/*; do
-        [ -d $nic ] || continue
-       if [ -n "${dev_port}" -a -e ${nic}/dev_port ]; then
-               if [ `cat ${nic}/dev_port` -ne ${dev_port} ]; then
+    for nic in "${disk}"/pci_dev/net/*; do
+        [ -d "$nic" ] || continue
+       if [ -n "${dev_port}" -a -e "${nic}/dev_port" ]; then
+               if [ "$(cat ${nic}/dev_port)" -ne "${dev_port}" ]; then
                        continue
                fi
        fi
         if [ -e ${nic}/address ]; then
            fcoe_interface=${nic##*/}
            if ! [ -e "/tmp/.fcoe-$fcoe_interface" ]; then
-               /sbin/fcoe-up $fcoe_interface $dcb
+               /sbin/fcoe-up "$fcoe_interface" "$dcb"
                > "/tmp/.fcoe-$fcoe_interface"
            fi
         fi
     done
 done
-modprobe -r edd
+
+[ "$_modprobe_r_edd" = "1" ] && modprobe -r edd
+
+unset _modprobe_r_edd