packages: rescan-scsi-bus/rescan-scsi-bus.sh - up to v1.41 (2010-06-01)
glen
glen at pld-linux.org
Thu Apr 5 18:27:29 CEST 2012
Author: glen Date: Thu Apr 5 16:27:29 2012 GMT
Module: packages Tag: HEAD
---- Log message:
- up to v1.41 (2010-06-01)
---- Files affected:
packages/rescan-scsi-bus:
rescan-scsi-bus.sh (1.9 -> 1.10)
---- Diffs:
================================================================
Index: packages/rescan-scsi-bus/rescan-scsi-bus.sh
diff -u packages/rescan-scsi-bus/rescan-scsi-bus.sh:1.9 packages/rescan-scsi-bus/rescan-scsi-bus.sh:1.10
--- packages/rescan-scsi-bus/rescan-scsi-bus.sh:1.9 Thu Apr 5 18:27:07 2012
+++ packages/rescan-scsi-bus/rescan-scsi-bus.sh Thu Apr 5 18:27:23 2012
@@ -27,11 +27,11 @@
for hostdir in /sys/class/scsi_host/host*; do
hostno=${hostdir#/sys/class/scsi_host/host}
if [ -f $hostdir/isp_name ] ; then
- hostname="qla2xxx"
+ hostname="qla2xxx"
elif [ -f $hostdir/lpfc_drvr_version ] ; then
- hostname="lpfc"
+ hostname="lpfc"
else
- hostname=`cat $hostdir/proc_name`
+ hostname=`cat $hostdir/proc_name`
fi
hosts="$hosts $hostno"
echo "Host adapter $hostno ($hostname) found."
@@ -67,26 +67,26 @@
printtype ()
{
- local type=$1
+ local type=$1
- case "$type" in
- 0) echo "Direct-Access " ;;
- 1) echo "Sequential-Access" ;;
- 2) echo "Printer " ;;
- 3) echo "Processor " ;;
- 4) echo "WORM " ;;
- 5) echo "CD-ROM " ;;
- 6) echo "Scanner " ;;
- 7) echo "Optical Device " ;;
- 8) echo "Medium Changer " ;;
- 9) echo "Communications " ;;
- 10) echo "Unknown " ;;
- 11) echo "Unknown " ;;
- 12) echo "RAID " ;;
- 13) echo "Enclosure " ;;
- 14) echo "Direct-Access-RBC" ;;
- *) echo "Unknown " ;;
- esac
+ case "$type" in
+ 0) echo "Direct-Access " ;;
+ 1) echo "Sequential-Access" ;;
+ 2) echo "Printer " ;;
+ 3) echo "Processor " ;;
+ 4) echo "WORM " ;;
+ 5) echo "CD-ROM " ;;
+ 6) echo "Scanner " ;;
+ 7) echo "Optical Device " ;;
+ 8) echo "Medium Changer " ;;
+ 9) echo "Communications " ;;
+ 10) echo "Unknown " ;;
+ 11) echo "Unknown " ;;
+ 12) echo "RAID " ;;
+ 13) echo "Enclosure " ;;
+ 14) echo "Direct-Access-RBC" ;;
+ *) echo "Unknown " ;;
+ esac
}
print02i()
@@ -108,31 +108,31 @@
ID=`print02i "$id"`
LUN=`print02i "$lun"`
if [ -d /sys/class/scsi_device ]; then
- SCSIPATH="/sys/class/scsi_device/${host}:${channel}:${id}:${lun}"
- if [ -d "$SCSIPATH" ] ; then
- SCSISTR="Host: scsi${host} Channel: $CHANNEL Id: $ID Lun: $LUN"
- if [ "$LN" -gt 0 ] ; then
- IVEND=$(cat ${SCSIPATH}/device/vendor)
- IPROD=$(cat ${SCSIPATH}/device/model)
- IPREV=$(cat ${SCSIPATH}/device/rev)
- SCSIDEV=$(printf ' Vendor: %-08s Model: %-16s Rev: %-4s' "$IVEND" "$IPROD" "$IPREV")
- SCSISTR="$SCSISTR
+ SCSIPATH="/sys/class/scsi_device/${host}:${channel}:${id}:${lun}"
+ if [ -d "$SCSIPATH" ] ; then
+ SCSISTR="Host: scsi${host} Channel: $CHANNEL Id: $ID Lun: $LUN"
+ if [ "$LN" -gt 0 ] ; then
+ IVEND=$(cat ${SCSIPATH}/device/vendor)
+ IPROD=$(cat ${SCSIPATH}/device/model)
+ IPREV=$(cat ${SCSIPATH}/device/rev)
+ SCSIDEV=$(printf ' Vendor: %-08s Model: %-16s Rev: %-4s' "$IVEND" "$IPROD" "$IPREV")
+ SCSISTR="$SCSISTR
$SCSIDEV"
- fi
- if [ "$LN" -gt 1 ] ; then
- ILVL=$(cat ${SCSIPATH}/device/scsi_level)
- type=$(cat ${SCSIPATH}/device/type)
- ITYPE=$(printtype $type)
- SCSITMP=$(printf ' Type: %-16s ANSI SCSI revision: %02d' "$ITYPE" "$((ILVL - 1))")
- SCSISTR="$SCSISTR
+ fi
+ if [ "$LN" -gt 1 ] ; then
+ ILVL=$(cat ${SCSIPATH}/device/scsi_level)
+ type=$(cat ${SCSIPATH}/device/type)
+ ITYPE=$(printtype $type)
+ SCSITMP=$(printf ' Type: %-16s ANSI SCSI revision: %02d' "$ITYPE" "$((ILVL - 1))")
+ SCSISTR="$SCSISTR
$SCSITMP"
- fi
- else
- return 1
fi
+ else
+ return 1
+ fi
else
- grepstr="scsi$host Channel: $CHANNEL Id: $ID Lun: $LUN"
- SCSISTR=`cat /proc/scsi/scsi | grep -A$LN -e"$grepstr"`
+ grepstr="scsi$host Channel: $CHANNEL Id: $ID Lun: $LUN"
+ SCSISTR=`cat /proc/scsi/scsi | grep -A$LN -e"$grepstr"`
fi
if test -z "$SCSISTR"; then return 1; else return 0; fi
}
@@ -185,7 +185,7 @@
echo "scsi report-devs 0" >/proc/scsi/scsi
fi
fi
-}
+}
# Test if SCSI device is still responding to commands
testonline ()
@@ -197,6 +197,14 @@
if test -z "$SGDEV"; then return 0; fi
sg_turs /dev/$SGDEV >/dev/null 2>&1
RC=$?
+ # Handle in progress of becoming ready and unit attention -- wait at max 11s
+ declare -i ctr=0
+ while test $RC = 2 -o $RC = 6 && test $ctr -le 10; do
+ if test $RC = 2; then sleep 1; fi
+ let ctr+=1
+ sg_turs /dev/$SGDEV >/dev/null 2>&1
+ RC=$?
+ done
# echo -e "\e[A\e[A\e[A${yellow}Test existence of $SGDEV = $RC ${norm} \n\n\n"
if test $RC = 1; then return $RC; fi
# Reset RC (might be !=0 for passive paths)
@@ -305,6 +313,12 @@
echo "$LLUN" | sed -n 's/.*lun=\(.*\)/\1/p'
}
+# Wait for udev to settle (create device nodes etc.)
+udevadm_settle()
+{
+ if test -x /sbin/udevadm; then /sbin/udevadm settle; fi
+}
+
# Perform scan on a single lun $host $channel $id $lun
dolunscan()
{
@@ -335,6 +349,7 @@
# Try readding, should fail if device is gone
echo "$channel $id $lun" > /sys/class/scsi_host/host${host}/scan
fi
+ udevadm_settle
else
echo "scsi remove-single-device $devnr" > /proc/scsi/scsi
if test $RC -eq 1 -o $lun -eq 0 ; then
@@ -346,6 +361,7 @@
if test $RC = 0 -o "$forcerescan" ; then
if test -e /sys/class/scsi_device/${host}:${channel}:${id}:${lun}/device; then
echo 1 > /sys/class/scsi_device/${host}:${channel}:${id}:${lun}/device/rescan
+ udevadm_settle
fi
fi
printf "\r\x1b[A\x1b[A\x1b[A${yellow}OLD: $norm"
@@ -361,6 +377,7 @@
printf "\r${green}NEW: $norm"
if test -e /sys/class/scsi_host/host${host}/scan; then
echo "$channel $id $lun" > /sys/class/scsi_host/host${host}/scan 2> /dev/null
+ udevadm_settle
else
echo "scsi add-single-device $devnr" > /proc/scsi/scsi
fi
@@ -394,16 +411,24 @@
#printf "\r${green}NEW: $norm"
if test -e /sys/class/scsi_host/host${host}/scan; then
echo "$channel $id $lun" > /sys/class/scsi_host/host${host}/scan 2> /dev/null
+ udevadm_settle
else
echo "scsi add-single-device $devnr" > /proc/scsi/scsi
fi
testexist -q
- if test -z "$SCSISTR"; then
+ if test -n "$SCSISTR"; then
+ lun0added=1
+ #testonline
+ else
# Device not present
- return
+ # return
+ # Find alternative LUN to send getluns to
+ for dev in /sys/class/scsi_device/${host}:${channel}:${id}:*; do
+ [ -d "$dev" ] || continue
+ lun=${dev##*:}
+ break
+ done
fi
- lun0added=1
- #testonline
fi
targetluns=`getluns`
lunremove=
@@ -417,7 +442,7 @@
# OK, is existing $lun (still) in reported list
for tmplun in $targetluns; do
if test $tmplun -eq $lun ; then
- inlist=1
+ inlist=1
dolunscan $lun0added
else
newsearch="$newsearch $tmplun"
@@ -426,8 +451,8 @@
# OK, we have now done a lunscan on $lun and
# $newsearch is the old $targetluns without $lun
if [ -z "$inlist" ]; then
- # Stale lun
- lunremove="$lunremove $lun"
+ # Stale lun
+ lunremove="$lunremove $lun"
fi
# $lun removed from $lunsearch (echo for whitespace cleanup)
targetluns=`echo $newsearch`
@@ -462,23 +487,23 @@
expandlist ()
{
- list=$1
- result=""
- first=${list%%,*}
- rest=${list#*,}
- while test ! -z "$first"; do
- beg=${first%%-*};
- if test "$beg" = "$first"; then
- result="$result $beg";
- else
- end=${first#*-}
- result="$result `seq $beg $end`"
- fi
- test "$rest" = "$first" && rest=""
- first=${rest%%,*}
- rest=${rest#*,}
- done
- echo $result
+ list=$1
+ result=""
+ first=${list%%,*}
+ rest=${list#*,}
+ while test ! -z "$first"; do
+ beg=${first%%-*};
+ if test "$beg" = "$first"; then
+ result="$result $beg";
+ else
+ end=${first#*-}
+ result="$result `seq $beg $end`"
+ fi
+ test "$rest" = "$first" && rest=""
+ first=${rest%%,*}
+ rest=${rest#*,}
+ done
+ echo $result
}
# main
@@ -592,6 +617,7 @@
echo "- - -" > /sys/class/scsi_host/host$host/scan 2> /dev/null;
channelsearch=
idsearch=
+ udevadm_settle
else
channelsearch=$opt_channelsearch
idsearch=$opt_idsearch
@@ -599,14 +625,14 @@
[ -n "$channelsearch" ] && echo -n "channels $channelsearch "
echo -n "for "
if [ -n "$idsearch" ] ; then
- echo -n " SCSI target IDs " $idsearch
+ echo -n " SCSI target IDs " $idsearch
else
- echo -n " all SCSI target IDs"
+ echo -n " all SCSI target IDs"
fi
if [ -n "$lunsearch" ] ; then
- echo ", LUNs " $lunsearch
+ echo ", LUNs " $lunsearch
else
- echo ", all LUNs"
+ echo ", all LUNs"
fi
dosearch
done
================================================================
---- CVS-web:
http://cvs.pld-linux.org/packages/rescan-scsi-bus/rescan-scsi-bus.sh?r1=1.9&r2=1.10
More information about the pld-cvs-commit
mailing list