Browse Source

fcoe/fcoe-edd.sh: cleanup the script

- 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 34203d03c0)
master
Harald Hoyer 10 years ago
parent
commit
cca313fa75
  1. 46
      modules.d/95fcoe/fcoe-edd.sh

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

@ -1,36 +1,54 @@ @@ -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

Loading…
Cancel
Save