Browse Source
- 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

1 changed files with 32 additions and 14 deletions
@ -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…
Reference in new issue