]> granicus.if.org Git - zfs/commitdiff
vdev_id: implement slot numbering by port id
authorsckobras <sckobras@users.noreply.github.com>
Mon, 14 Aug 2017 22:18:26 +0000 (00:18 +0200)
committerTony Hutter <hutter2@llnl.gov>
Mon, 21 Aug 2017 23:41:22 +0000 (16:41 -0700)
With HPE hardware and hpsa-driven SAS adapters, only a single phy is
reported, but no individual per-port phys (ie. no phy* entry below
port_dir), which breaks topology detection in the current sas_handler
code. Instead, slot information can be derived directly from the port
number. This change implements a new slot keyword "port" similar to
"id" and "lun", and assumes a default phy/port of 0 if no individual
phy entry can be found. It allows to use the "sas_direct" topology with
current HPE Dxxxx and Apollo 45xx JBODs.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Daniel Kobras <d.kobras@science-computing.de>
Closes #6484

cmd/vdev_id/vdev_id
man/man5/vdev_id.conf.5

index c7d962045bed3995e90ecb1212d55062fe55bf17..a2cba086eeaabd1526136382825fe5fcc61a22d1 100755 (executable)
@@ -237,7 +237,7 @@ sas_handler() {
 
        PHY=`ls -d $port_dir/phy* 2>/dev/null | head -1 | awk -F: '{print $NF}'`
        if [ -z "$PHY" ] ; then
-               return
+               PHY=0
        fi
        PORT=$(( $PHY / $PHYS_PER_PORT ))
 
@@ -262,6 +262,10 @@ sas_handler() {
        "phy")
                SLOT=`cat $end_device_dir/phy_identifier 2>/dev/null`
                ;;
+       "port")
+               d=$(eval echo \${$i})
+               SLOT=`echo $d | sed -e 's/^.*://'`
+               ;;
        "id")
                i=$(($i + 1))
                d=$(eval echo \${$i})
index 4fea83157f94a23c77c7c6c2d950f5494493fa25..eff8c27cc4ee2c611d637c8dc75f1a9fe237d69d 100644 (file)
@@ -90,7 +90,7 @@ internally uses this value to determine which HBA or switch port a
 device is connected to.  The default is 4.
 
 .TP
-\fIslot\fR <bay|phy|id|lun>
+\fIslot\fR <bay|phy|port|id|lun>
 Specifies from which element of a SAS identifier the slot number is
 taken.  The default is bay.
 
@@ -98,6 +98,8 @@ taken.  The default is bay.
 
 \fIphy\fR - read the slot number from the phy identifier.
 
+\fIport\fR - use the SAS port as the slot number.
+
 \fIid\fR - use the scsi id as the slot number.
 
 \fIlun\fR - use the scsi lun as the slot number.