chiark / gitweb /
volume_id: use glibc's byteswap
[elogind.git] / extras / raid-devfs.sh
1 #!/bin/sh -e
2 #
3 # Copyright (c) 2004 Marco d'Itri <md@linux.it>
4 # Copyright (c) 2004 Piotr Roszatycki <dexter@debian.org>
5 #
6 # Usage:
7 # KERNEL=="cciss!*", PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", NAME="%c{1}", SYMLINK+="%k"
8 # KERNEL=="ida!*",   PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", NAME="%c{1}", SYMLINK+="%k"
9 # KERNEL=="rd!*",    PROGRAM="/etc/udev/scripts/raid-devfs.sh %k", NAME="%c{1}", SYMLINK+="%k"
10
11 get_dev_number_cciss() {
12   grep '^cciss/' /proc/driver/cciss/* | cat -n | \
13     sed -n "/cciss\/$1:/s/cciss.*//p"
14 }
15
16 get_dev_number_ida() {
17   grep '^ida/' /proc/driver/cpqarray/* | cat -n | \
18     sed -n "/ida\/$1:/s/ida.*//p"
19 }
20
21 get_dev_number_rd() {
22   grep '^ */dev/rd/' /proc/rd/*/initial_status | cat -n | \
23     sed -n "/rd\/$1:/s/\/dev\/rd.*//p"
24 }
25
26 get_dev_number() {
27     dev=$1
28     num=$(eval $(echo get_dev_number_$TYPE $dev))
29     [ "$num" ] || exit 1
30     echo $(($num - 1))
31 }
32
33 TYPE=${1%%/*}
34 NAME=${1#*/}
35
36 # abort if there was no match
37 [ "$TYPE" != "$1" ] || exit 1
38
39 case "$NAME" in
40     *p*)
41         LONG_NAME=disc$(get_dev_number ${NAME%%p*})/part${NAME##*p}
42         ;;
43     *)
44         LONG_NAME=disc$(get_dev_number $NAME)/disc
45         ;;
46 esac
47
48 echo "$TYPE/$LONG_NAME"
49 exit 0
50