X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Fpath_id%2Fpath_id;h=0fad30cfb257d3468ce047efaf1776994be04f3c;hp=a7d650bf423b62b46cfd188d3b31c9814d370c53;hb=f183b6ed766a18835d53dc1e36a4e98756ebd0b7;hpb=6ecad86d49c7d9602d4b0f36ce53ccb66eb2b80a diff --git a/extras/path_id/path_id b/extras/path_id/path_id old mode 100644 new mode 100755 index a7d650bf4..0fad30cfb --- a/extras/path_id/path_id +++ b/extras/path_id/path_id @@ -74,6 +74,17 @@ handle_pci () { DEV=${PWD} pci_id=${DEV##*/} host_dev_path=$DEV + + # cciss devices don't have a separate sysfs node + for blk_link in block*; do + if [ -L "$blk_link" ]; then + case "$blk_link" in + *cciss*) + d=cciss-${blk_link#*cciss\!} + ;; + esac + fi + done while [ ! -z "$host_dev_path" ] ; do case "$host_dev_path" in */pci[0-9]*) @@ -84,7 +95,11 @@ handle_pci () { ;; esac done - d="pci-$pci_id-$d" + if [ "$d" ]; then + d="pci-$pci_id-$d" + else + d="pci-$pci_id" + fi D="$host_dev_path" RESULT=0 } @@ -416,35 +431,45 @@ handle_device () { full_sysfs_path="$SYSFS$DEVPATH" case "$DEVPATH" in /devices/*) - # new sysfs layout + full_sysfs_path="${full_sysfs_path%/*}" + # skip parent device of the same subsystem if [ -L $full_sysfs_path/subsystem ]; then - full_sysfs_path="${full_sysfs_path%/*}" cd "$full_sysfs_path/subsystem"; subsys="`pwd -P`" cd "$OPWD" subsys="${subsys##*/}" - if [ "$subsys" = "block" ]; then - # parent is "block", it's a partition, move one up - full_sysfs_path="${full_sysfs_path%/*}" + if [ "$subsys" = "$TYPE" ]; then + : skip same subsystem parent + full_sysfs_path="${full_sysfs_path%/*}" fi - cd $full_sysfs_path fi + # skip subsystem directory + subsys="${full_sysfs_path##*/}" + if [ "$subsys" = "$TYPE" ]; then + : skip subsystem directory + full_sysfs_path="${full_sysfs_path%/*}" + fi + cd $full_sysfs_path ;; *) # old sysfs layout - if [ ! -L $full_sysfs_path/device ] ; then - if [ -f $full_sysfs_path/range ] ; then return ; fi + if [ ! -L $full_sysfs_path/device ]; then full_sysfs_path="${full_sysfs_path%/*}" : full_sysfs_path "$full_sysfs_path" - if [ ! -L $full_sysfs_path/device -o ! -f $full_sysfs_path/dev ] ; then + if [ ! -L $full_sysfs_path/device -o ! -f $full_sysfs_path/dev ]; then return fi fi - cd $full_sysfs_path/device + if [ -L $full_sysfs_path/device/device ]; then + cd $full_sysfs_path/device/device + else + cd $full_sysfs_path/device + fi ;; esac full_sysfs_device_path="`pwd -P`" cd "$OPWD" + D=$full_sysfs_device_path while [ ! -z "$D" ] ; do case "$D" in @@ -528,7 +553,7 @@ handle_device () { ;; *) mode="" - ;; + ;; esac if [ "$d" ]; then d="$d-${rewind}st${mode}" @@ -536,22 +561,9 @@ handle_device () { fi } -case "$TYPE" in - block) - handle_device - echo "ID_PATH=$d" - ;; - scsi_tape) - handle_device - echo "ID_PATH=$d" - ;; - input) - handle_device - echo "ID_PATH=$d" - ;; - *) - RESULT=1 - ;; -esac - -exit $RESULT +handle_device +if [ -z "$d" ]; then + exit 1 +fi +echo "ID_PATH=$d" +exit 0