From 426563be7002ad9bdd99d3ad21fc8698aba353d0 Mon Sep 17 00:00:00 2001 From: sckobras Date: Tue, 15 Aug 2017 00:18:26 +0200 Subject: [PATCH] vdev_id: implement slot numbering by port id 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 Signed-off-by: Daniel Kobras Closes #6484 --- cmd/vdev_id/vdev_id | 6 +++++- man/man5/vdev_id.conf.5 | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id index c7d962045..a2cba086e 100755 --- a/cmd/vdev_id/vdev_id +++ b/cmd/vdev_id/vdev_id @@ -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}) diff --git a/man/man5/vdev_id.conf.5 b/man/man5/vdev_id.conf.5 index 4fea83157..eff8c27cc 100644 --- a/man/man5/vdev_id.conf.5 +++ b/man/man5/vdev_id.conf.5 @@ -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 +\fIslot\fR 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. -- 2.40.0