chiark / gitweb /
[PATCH] ide-devfs.sh update
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>
Tue, 30 Dec 2003 09:08:00 +0000 (01:08 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:13:12 +0000 (21:13 -0700)
Attached is a patch for ide-devfs.sh,
The script is merged with the one from Martin Schlemmer, and cleaned up
by him, to create both types of symlinks with one single rule:

  CALLOUT, BUS="ide", PROGRAM="/etc/udev/ide-devfs.sh %k %b %n", ID="hd*", NAME="%1c", SYMLINK="%2c %3c"

/udev/
|-- cdroms
|   `-- cdrom0 -> ../hdc
|-- discs
|   |-- disc0
|   |   |-- disc -> ../../hda
|   |   |-- part1 -> ../../hda1
|   |   |-- part2 -> ../../hda2
|   |   `-- part4 -> ../../hda4
|   |-- disc1
|   |   |-- disc -> ../../hdb
|   |   `-- part1 -> ../../hdb1
|   `-- disc2
|       |-- disc -> ../../hde
|       `-- part1 -> ../../hde1
|-- hda
|-- hda1
|-- hda2
|-- hda4
|-- hdb
|-- hdb1
|-- hdc
|-- hde
|-- hde1
`-- ide
    |-- host0
    |   |-- bus0
    |   |   |-- target0
    |   |   |   `-- lun0
    |   |   |       |-- disc -> ../../../../../hda
    |   |   |       |-- part1 -> ../../../../../hda1
    |   |   |       |-- part2 -> ../../../../../hda2
    |   |   |       `-- part4 -> ../../../../../hda4
    |   |   `-- target1
    |   |       `-- lun0
    |   |           |-- disc -> ../../../../../hdb
    |   |           `-- part1 -> ../../../../../hdb1
    |   `-- bus1
    |       `-- target0
    |           `-- lun0
    |               `-- cd -> ../../../../../hdc
    `-- host2
        `-- bus0
            `-- target0
                `-- lun0
                    |-- disc -> ../../../../../hde
                    `-- part1 -> ../../../../../hde1

extras/ide-devfs.sh

index 3409c407eb5f97d358abe2a59dc074c27b7bad8d..db96b5d2996a6ca707c6899d44c08f15b255774b 100644 (file)
@@ -2,26 +2,46 @@
 
 # udev CALLOUT script
 # return devfs-names for ide-devices
-# CALLOUT, BUS="ide", PROGRAM="/etc/udev/ide-devfs.sh %k %b %n", ID="hd*", NAME="%1c", SYMLINK="%2c"
+# CALLOUT, BUS="ide", PROGRAM="/etc/udev/ide-devfs.sh %k %b %n", ID="hd*", NAME="%1c", SYMLINK="%2c %3c"
 
-HOST=${2%\.[0-9]}
-TARGET=${2#[0-9]\.}
+HOST="${2%\.[0-9]}"
+TARGET="${2#[0-9]\.}"
 
-if [ -z ${HOST#[13579]} ]; then
-       HOST=`expr $HOST - 1`
+if [ -z "${HOST#[13579]}" ]; then
+       HOST=`expr ${HOST} - 1`
        BUS="1"
 else
        BUS="0"
 fi
 
+get_dev_number() {
+       local x=
+       local num=0
+       local MEDIA=
+       local DRIVE="${1%[0-9]*}"
+
+       for x in /proc/ide/*/media; do
+               if [ -e "${x}" ]; then
+                       MEDIA=`cat ${x}`
+                       if [ "${MEDIA}" = "$2" ]; then
+                               num=`expr ${num} + 1`
+                       fi
+                       if [ "${x}" = "/proc/ide/${DRIVE}/media" ]; then
+                               break
+                       fi
+               fi
+       done
+       
+       echo `expr ${num} - 1`
+}
+
 if [ -z "$3" ]; then
-       MEDIA=`cat /proc/ide/$1/media`
-       if [ "$MEDIA" = "cdrom" ]; then
-               echo $1 ide/host$HOST/bus$BUS/target$TARGET/lun0/cd
-       elif [ "$MEDIA" = "disk" ]; then
-               echo $1 ide/host$HOST/bus$BUS/target$TARGET/lun0/disc
+       MEDIA=`cat /proc/ide/${1}/media`
+       if [ "${MEDIA}" = "cdrom" ]; then
+               echo ${1} ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/cd cdroms/cdrom`get_dev_number $1 cdrom`
+       elif [ "${MEDIA}" = "disk" ]; then
+               echo $1 ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/disc discs/disc`get_dev_number $1 disk`/disc
        fi
 else
-       echo $1 ide/host$HOST/bus$BUS/target$TARGET/lun0/part$3
+       echo $1 ide/host${HOST}/bus${BUS}/target${TARGET}/lun0/part$3 discs/disc`get_dev_number $1 disk`/part$3
 fi
-