mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-30 19:01:25 +02:00
104 lines
2.8 KiB
Diff
104 lines
2.8 KiB
Diff
From 8714d5292b09502b9f19a6f01f7d5fac99e9759c Mon Sep 17 00:00:00 2001
|
|
From: Ned Bass <bass6@llnl.gov>
|
|
Date: Wed, 19 Sep 2012 11:44:12 -0700
|
|
Subject: [PATCH] Make vdev_id POSIX sh compatible
|
|
|
|
Full bash may not be available in all environments where udev helpers
|
|
run, such as in an initial ramdisk. To avoid breakage in this case,
|
|
remove use of bash-specific features such as variable arrays and the
|
|
`declare' keyword from the vdev_id script.
|
|
|
|
Closes #870
|
|
Signed-off-by: Ned Bass <bass6@llnl.gov>
|
|
---
|
|
cmd/vdev_id/vdev_id | 33 ++++++++++++++++++++-------------
|
|
1 file changed, 20 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id
|
|
index d278197..55af515 100755
|
|
--- a/cmd/vdev_id/vdev_id
|
|
+++ b/cmd/vdev_id/vdev_id
|
|
@@ -1,4 +1,4 @@
|
|
-#!/bin/bash
|
|
+#!/bin/sh
|
|
#
|
|
# vdev_id: udev helper to generate user-friendly names for JBOD disks
|
|
#
|
|
@@ -80,7 +80,6 @@ SLOT_MAP=
|
|
CHANNEL_MAP=
|
|
MULTIPATH=
|
|
TOPOLOGY=
|
|
-declare -i i j
|
|
|
|
usage() {
|
|
cat << EOF
|
|
@@ -229,32 +228,39 @@ else
|
|
sys_path=`udevadm info -q path -p /sys/block/$DEV 2>/dev/null`
|
|
fi
|
|
|
|
-dirs=(`echo "$sys_path" | tr / ' '`)
|
|
+# Use positional parameters as an ad-hoc array
|
|
+set -- $(echo "$sys_path" | tr / ' ')
|
|
+num_dirs=$#
|
|
scsi_host_dir="/sys"
|
|
|
|
# Get path up to /sys/.../hostX
|
|
-for (( i=0; i<${#dirs[*]}; i++ )); do
|
|
- d=${dirs[$i]}
|
|
+i=1
|
|
+while [ $i -le $num_dirs ] ; do
|
|
+ d=$(eval echo \$$i)
|
|
scsi_host_dir="$scsi_host_dir/$d"
|
|
echo $d | egrep -q -e '^host[0-9]+$' && break
|
|
+ i=$(($i + 1))
|
|
done
|
|
|
|
-if [ $i = ${#dirs[*]} ] ; then
|
|
+if [ $i = $num_dirs ] ; then
|
|
exit 0
|
|
fi
|
|
|
|
-PCI_ID=`echo ${dirs[$(( $i - 1 ))]} | awk -F: '{print $2":"$3}'`
|
|
+PCI_ID=$(eval echo \$$(($i -1)) | awk -F: '{print $2":"$3}')
|
|
|
|
-# In sas_switch mode, the directory three levels beneath /sys/.../hostX
|
|
+# In sas_switch mode, the directory four levels beneath /sys/.../hostX
|
|
# contains symlinks to phy devices that reveal the switch port number. In
|
|
# sas_direct mode, the phy links one directory down reveal the HBA port.
|
|
port_dir=$scsi_host_dir
|
|
case $TOPOLOGY in
|
|
- "sas_switch") j=$(($i+4)) ;;
|
|
+ "sas_switch") j=$(($i + 4)) ;;
|
|
"sas_direct") j=$(($i + 1)) ;;
|
|
esac
|
|
-for (( i++; i<=$j; i++ )); do
|
|
- port_dir="$port_dir/${dirs[$i]}"
|
|
+
|
|
+i=$(($i + 1))
|
|
+while [ $i -le $j ] ; do
|
|
+ port_dir="$port_dir/$(eval echo \$$i)"
|
|
+ i=$(($i + 1))
|
|
done
|
|
|
|
PHY=`ls -d $port_dir/phy* 2>/dev/null | head -1 | awk -F: '{print $NF}'`
|
|
@@ -266,13 +272,14 @@ PORT=$(( $PHY / $PHYS_PER_PORT ))
|
|
# Look in /sys/.../sas_device/end_device-X for the bay_identifier
|
|
# attribute.
|
|
end_device_dir=$port_dir
|
|
-for (( ; i<${#dirs[*]} ; i++ )); do
|
|
- d=${dirs[$i]}
|
|
+while [ $i -lt $num_dirs ] ; do
|
|
+ d=$(eval echo \$$i)
|
|
end_device_dir="$end_device_dir/$d"
|
|
if echo $d | egrep -q -e '^end_device' ; then
|
|
end_device_dir="$end_device_dir/sas_device/$d"
|
|
break
|
|
fi
|
|
+ i=$(($i + 1))
|
|
done
|
|
|
|
SLOT=`cat $end_device_dir/bay_identifier 2>/dev/null`
|
|
--
|
|
1.7.10
|
|
|