You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.4 KiB
86 lines
2.4 KiB
From 34203d03c0d43aa0aed12988d2719455e80eae54 Mon Sep 17 00:00:00 2001 |
|
From: Harald Hoyer <harald@redhat.com> |
|
Date: Fri, 3 Jul 2015 13:52:32 +0200 |
|
Subject: [PATCH] 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 |
|
--- |
|
modules.d/95fcoe/fcoe-edd.sh | 46 ++++++++++++++++++++++++++++++-------------- |
|
1 file changed, 32 insertions(+), 14 deletions(-) |
|
|
|
diff --git a/modules.d/95fcoe/fcoe-edd.sh b/modules.d/95fcoe/fcoe-edd.sh |
|
index d0ea60d5..8607b568 100755 |
|
--- a/modules.d/95fcoe/fcoe-edd.sh |
|
+++ b/modules.d/95fcoe/fcoe-edd.sh |
|
@@ -2,37 +2,55 @@ |
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- |
|
# ex: ts=8 sw=4 sts=4 et filetype=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
|
|
|