From 34203d03c0d43aa0aed12988d2719455e80eae54 Mon Sep 17 00:00:00 2001 From: Harald Hoyer 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