summaryrefslogtreecommitdiff
path: root/extras/path_id
diff options
context:
space:
mode:
Diffstat (limited to 'extras/path_id')
-rwxr-xr-x[-rw-r--r--]extras/path_id/path_id24
1 files changed, 15 insertions, 9 deletions
diff --git a/extras/path_id/path_id b/extras/path_id/path_id
index ee26dc1f8a..57879b5a9a 100644..100755
--- a/extras/path_id/path_id
+++ b/extras/path_id/path_id
@@ -427,27 +427,32 @@ 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
@@ -456,6 +461,7 @@ handle_device () {
esac
full_sysfs_device_path="`pwd -P`"
cd "$OPWD"
+
D=$full_sysfs_device_path
while [ ! -z "$D" ] ; do
case "$D" in