chiark / gitweb /
[PATCH] raid-devfs.sh: devfs names for hardware RAID controllers
authormd@Linux.IT <md@Linux.IT>
Sun, 6 Feb 2005 00:07:13 +0000 (01:07 +0100)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 06:24:20 +0000 (23:24 -0700)
extras/raid-devfs.sh [new file with mode: 0644]

diff --git a/extras/raid-devfs.sh b/extras/raid-devfs.sh
new file mode 100644 (file)
index 0000000..796232b
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh -e
+#
+# Copyright (c) 2004 Marco d'Itri <md@linux.it>
+# Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
+#
+# Usage:
+# KERNEL="cciss!*", PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", NAME="%c{1}", SYMLINK="%k"
+# KERNEL="ida!*",   PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", NAME="%c{1}", SYMLINK="%k"
+# KERNEL="rd!*",    PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", NAME="%c{1}", SYMLINK="%k"
+
+get_dev_number_cciss() {
+  grep '^cciss/' /proc/driver/cciss/* | cat -n | \
+    sed -n "/cciss\/$1:/s/cciss.*//p"
+}
+
+get_dev_number_ida() {
+  grep '^ida/' /proc/driver/cpqarray/* | cat -n | \
+    sed -n "/ida\/$1:/s/ida.*//p"
+}
+
+get_dev_number_rd() {
+  grep '^ */dev/rd/' /proc/rd/*/initial_status | cat -n | \
+    sed -n "/rd\/$1:/s/\/dev\/rd.*//p"
+}
+
+get_dev_number() {
+    dev=$1
+    num=$(eval $(echo get_dev_number_$TYPE $dev))
+    [ "$num" ] || exit 1
+    echo $(($num - 1))
+}
+
+TYPE=${1%%/*}
+NAME=${1#*/}
+
+# abort if there was no match
+[ "$TYPE" != "$1" ] || exit 1
+
+case "$NAME" in
+    *p*)
+       LONG_NAME=disc$(get_dev_number ${NAME%%p*})/part${NAME##*p}
+       ;;
+    *)
+       LONG_NAME=disc$(get_dev_number $NAME)/disc
+       ;;
+esac
+
+echo "$TYPE/$LONG_NAME"
+exit 0
+