chiark / gitweb /
path_id: rework SAS persistent names
authorJeremy Higdon <jeremy@sgi.com>
Thu, 18 Dec 2008 12:42:28 +0000 (13:42 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Thu, 18 Dec 2008 12:42:28 +0000 (13:42 +0100)
extras/path_id/path_id

index f45f62ad32eb1cf0a57e96e1ff1b895d357c0dd8..d21dea70117b8fb91fe28fc80f42d504aedc73af 100755 (executable)
@@ -285,44 +285,46 @@ handle_sas () {
        : handle_sas $*
        local DEV=$1
        local cil adapter controller_dev
+       local lun
+       lun=${DEV##*:}
        # SAS device
-       sas_host_path="${DEV%%/port*}"
-       sas_phy_path="${DEV#*/host*/}"
-       sas_phy_path="${sas_phy_path%%/target*}"
-       sas_phy_id="${sas_phy_path%%/*}"
-       sas_phy_id="${sas_phy_id##*port-}"
-       sas_port_id="${sas_phy_path%%/end_device*}"
-       sas_port_id="${sas_port_id##*port-}"
-       sas_end_id="${sas_phy_path##*end_device-}"
-       sas_phy_dev="/sys/class/sas_phy/phy-${sas_phy_id}"
-       if [ -e "$sas_phy_dev/sas_address" ]; then
-               read phy_address < $sas_phy_dev/sas_address
-               read phy_id < $sas_phy_dev/phy_identifier
-       fi
-       if [ -z "$phy_address" ] ; then
+       sas_end_path="${DEV%%/target*}"
+       sas_host_path="${sas_end_path%%/port*}"
+       sas_phy_path="${sas_end_path#*/host*/}"
+       sas_phy_path="${sas_phy_path%%/*}"
+       sas_phy_path="${sas_host_path}/${sas_phy_path}"
+
+       sas_phy_id=255
+       for phy in $sas_phy_path/phy-*/sas_phy/phy-* ; do
+               if [ -d "$phy" ] ; then
+                       read phy_id < $phy/phy_identifier
+                       if [ $phy_id -lt $sas_phy_id ]; then
+                               sas_phy_id=$phy_id
+                       fi
+               fi
+       done
+
+       if [ $sas_phy_id -eq 255 ] ; then
                : no initiator address
                D=
                RESULT=1
                return
        fi
+
+       sas_port_id="${sas_phy_path##*/port-}"
        sas_port_dev="/sys/class/sas_port/port-${sas_port_id}"
        if [ -e "$sas_port_dev/num_phys" ] ; then
                read phy_port < $sas_port_dev/num_phys
        fi
-       if [ -z "$phy_port" ] ; then
-               : no initiator address
-               D=
-               RESULT=1
-               return
-       fi
-       sas_phy_address="$phy_address:$phy_port:$phy_id"
+
+       sas_end_id="${sas_end_path##*end_device-}"
        sas_end_dev="/sys/class/sas_device/end_device-${sas_end_id}"
        if [ -e "$sas_end_dev/sas_address" ]; then
                read end_address < $sas_end_dev/sas_address
                read end_id < $sas_end_dev/phy_identifier
        fi
        if [ -z "$end_address" ] ; then
-               : no initiator address
+               : no end device address
                D=
                RESULT=1
                return
@@ -330,7 +332,7 @@ handle_sas () {
        sas_end_address="$end_address:$end_id"
        controller_dev="${sas_host_path%/host[0-9]*}"
        # SAS devices are always endpoints
-       d="sas-${sas_phy_address}-${sas_end_address}"
+       d="sas-phy${sas_phy_id}:${phy_port}-${sas_end_address}-lun$lun"
        D="$controller_dev"
        RESULT=0
 }