packages: rescan-scsi-bus/rescan-scsi-bus.sh - up to v1.29 (2008-10-29)

glen glen at pld-linux.org
Thu Apr 5 18:26:14 CEST 2012


Author: glen                         Date: Thu Apr  5 16:26:14 2012 GMT
Module: packages                      Tag: HEAD
---- Log message:
- up to v1.29 (2008-10-29)

---- Files affected:
packages/rescan-scsi-bus:
   rescan-scsi-bus.sh (1.6 -> 1.7) 

---- Diffs:

================================================================
Index: packages/rescan-scsi-bus/rescan-scsi-bus.sh
diff -u packages/rescan-scsi-bus/rescan-scsi-bus.sh:1.6 packages/rescan-scsi-bus/rescan-scsi-bus.sh:1.7
--- packages/rescan-scsi-bus/rescan-scsi-bus.sh:1.6	Tue Nov 13 14:53:06 2007
+++ packages/rescan-scsi-bus/rescan-scsi-bus.sh	Thu Apr  5 18:26:09 2012
@@ -1,8 +1,8 @@
 #!/bin/bash
 # Skript to rescan SCSI bus, using the 
 # scsi add-single-device mechanism
-# (w) 1998-03-19 Kurt Garloff <kurt at garloff.de> (c) GNU GPL
-# (w) 2003-07-16 Kurt Garloff <garloff at suse.de> (c) GNU GPL
+# (c) 1998--2008 Kurt Garloff <kurt at garloff.de>, GNU GPL v2 or later
+# (c) 2006--2008 Hannes Reinecke, GNU GPL v2 or later
 # $Id$
 
 setcolor ()
@@ -39,7 +39,8 @@
     fi
     hosts="$hosts $hostno"
     echo "Host adapter $hostno ($hostname) found."
-  done  
+  done
+  hosts=`echo $hosts | sed 's/ /\n/g' | sort -n`
 }
 
 # Return hosts. /proc/scsi/HOSTADAPTER/? must exist
@@ -182,17 +183,29 @@
   # 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
   # OK, device online, compare INQUIRY string
-  INQ=`sg_inq -36 /dev/$SGDEV`
+  INQ=`sg_inq $sg_len_arg /dev/$SGDEV`
   IVEND=`echo "$INQ" | grep 'Vendor identification:' | sed 's/^[^:]*: \(.*\)$/\1/'`
   IPROD=`echo "$INQ" | grep 'Product identification:' | sed 's/^[^:]*: \(.*\)$/\1/'`
   IPREV=`echo "$INQ" | grep 'Product revision level:' | sed 's/^[^:]*: \(.*\)$/\1/'`
   STR=`printf "  Vendor: %-08s Model: %-16s Rev: %-4s" "$IVEND" "$IPROD" "$IPREV"`
+  IPTYPE=`echo "$INQ" | sed -n 's/.* Device_type=\([0-9]*\) .*/\1/p'`
+  IPQUAL=`echo "$INQ" | sed -n 's/ *PQual=\([0-9]*\)  Device.*/\1/p'`
+  if [ "$IPQUAL" != 0 ] ; then
+    echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}\nLU not available (PQual $IPQUAL)${norm}\n\n\n"
+    return 1
+  fi
+
   procscsiscsi
-  SCSISTR=`echo "$SCSISTR" | grep 'Vendor:'`
-  if [ "$SCSISTR" != "$STR" ]; then
-    echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}\nfrom:${SCSISTR#* } \nto: $STR ${norm}\n\n\n"
+  TMPSTR=`echo "$SCSISTR" | grep 'Vendor:'`
+  if [ "$TMPSTR" != "$STR" ]; then
+    echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}\nfrom:${TMPSTR#* } \nto: $STR ${norm}\n\n\n"
     return 1
   fi
+  TMPSTR=`echo "$SCSISTR" | sed -n 's/.*Type: *\(.*\) *ANSI.*/\1/p'`
+  if [ $TMPSTR != $TYPE ] ; then
+     echo -e "\e[A\e[A\e[A\e[A${red}$SGDEV changed: ${bold}\nfrom:${TMPSTR} \nto: $TYPE ${norm}\n\n\n"
+     return 1
+  fi  
   return $RC
 }
 
@@ -259,9 +272,9 @@
 # Returns the list of existing LUNs
 getluns ()
 {
-  if test ! -x /usr/bin/sg_luns; then return ""; fi
+  if test ! -x /usr/bin/sg_luns; then return; fi
   sgdevice
-  if test -z "$SGDEV"; then return ""; fi
+  if test -z "$SGDEV"; then return; fi
   sg_luns -d /dev/$SGDEV | sed -n 's/.*lun=\(.*\)/\1/p'
 }
 
@@ -292,6 +305,12 @@
         echo "scsi add-single-device $devnr" > /proc/scsi/scsi
       fi
     fi
+    if test $RC = 0 ; 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
+      fi
+    fi
+
     printf "\r\x1b[A\x1b[A\x1b[A${yellow}OLD: $norm"
     testexist
     if test -z "$SCSISTR"; then
@@ -386,7 +405,7 @@
       idlist
     fi
     for id in $idsearch; do
-      if test -z $lunsearch ; then
+      if test -z "$lunsearch"; then
 	doreportlun
       else
 	for lun in $lunsearch; do
@@ -444,13 +463,21 @@
     echo $result
 }
 
-if test ! -d /proc/scsi/; then
+if test ! -d /sys/class/scsi_host/ -a ! -d /proc/scsi/; then
   echo "Error: SCSI subsystem not active"
   exit 1
 fi	
 
 # Make sure sg is there
 modprobe sg >/dev/null 2>&1
+
+sg_version=$(sg_inq -V 2>&1 | cut -d " " -f 3)
+sg_version=${sg_version##0.}
+if [ "$sg_version" -lt 70 ] ; then
+    sg_len_arg="-36"
+else
+    sg_len_arg="--len=36"
+fi
 
 # defaults
 unsetcolor
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/packages/rescan-scsi-bus/rescan-scsi-bus.sh?r1=1.6&r2=1.7



More information about the pld-cvs-commit mailing list