diff options
author | Ned Bass <[email protected]> | 2014-01-13 13:32:41 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2014-01-17 11:17:54 -0800 |
commit | 09d0b30fd1ba08a95e86909d2e1abb2997b0a871 (patch) | |
tree | beedb9720ce434b7e7cae4816394d2878974caf3 /cmd | |
parent | 35d3e32274ff05d9b080ea0a77ade1f9c9d7bafc (diff) |
vdev_id: support per-channel slot mappings
The vdev_id udev helper currently applies slot renumbering rules to
every channel (JBOD) in the system. This is too inflexible for systems
with non-homogeneous storage topologies. The "slot" keyword now takes
an optional third parameter which names a channel to which the mapping
will apply. If the third parameter is omitted then the rule applies to
all channels. The first-specified rule that can match a slot takes
precedence. Therefore a channel-specific rule for a given slot should
generally appear before a generic rule for the same slot number. In
this way a custom slot mapping can be applied to a particular channel
and a default mapping applied to the rest.
Signed-off-by: Ned Bass <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #2056
Diffstat (limited to 'cmd')
-rwxr-xr-x | cmd/vdev_id/vdev_id | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/cmd/vdev_id/vdev_id b/cmd/vdev_id/vdev_id index 713ff9865..b6752ba1b 100755 --- a/cmd/vdev_id/vdev_id +++ b/cmd/vdev_id/vdev_id @@ -39,18 +39,20 @@ # channel 86:00.0 1 C # channel 86:00.0 0 D # -# # Linux Mapped -# # Slot Slot -# slot 1 7 -# slot 2 10 -# slot 3 3 -# slot 4 6 -# slot 5 2 -# slot 6 8 -# slot 7 1 -# slot 8 4 -# slot 9 9 -# slot 10 5 +# # Custom mapping for Channel A +# +# # Linux Mapped +# # Slot Slot Channel +# slot 1 7 A +# slot 2 10 A +# slot 3 3 A +# slot 4 6 A +# +# # Default mapping for B, C, and D +# slot 1 4 +# slot 2 2 +# slot 3 1 +# slot 4 3 # # # # Example vdev_id.conf - sas_switch @@ -110,10 +112,11 @@ EOF map_slot() { local LINUX_SLOT=$1 + local CHANNEL=$2 local MAPPED_SLOT= - MAPPED_SLOT=`awk "\\$1 == \"slot\" && \\$2 == ${LINUX_SLOT} \ - { print \\$3; exit }" $CONFIG` + MAPPED_SLOT=`awk "\\$1 == \"slot\" && \\$2 == ${LINUX_SLOT} && \ + \\$4 ~ /^(${CHANNEL}|)$/ { print \\$3; exit }" $CONFIG` if [ -z "$MAPPED_SLOT" ] ; then MAPPED_SLOT=$LINUX_SLOT fi @@ -254,8 +257,8 @@ sas_handler() { return fi - SLOT=`map_slot $SLOT` CHAN=`map_channel $PCI_ID $PORT` + SLOT=`map_slot $SLOT $CHAN` if [ -z "$CHAN" ] ; then return fi |