mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.1 KiB

  1. #!/bin/bash -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="/lib/udev/raid-devfs.sh %k", NAME="%c{1}", SYMLINK+="%k"
  8. # KERNEL=="ida!*", PROGRAM="/lib/udev/raid-devfs.sh %k", NAME="%c{1}", SYMLINK+="%k"
  9. # KERNEL=="rd!*", PROGRAM="/lib/udev/raid-devfs.sh %k", NAME="%c{1}", SYMLINK+="%k"
  10. get_dev_number_cciss() {
  11. grep '^cciss/' /proc/driver/cciss/* | cat -n | \
  12. sed -n "/cciss\/$1:/s/cciss.*//p"
  13. }
  14. get_dev_number_ida() {
  15. grep '^ida/' /proc/driver/cpqarray/* | cat -n | \
  16. sed -n "/ida\/$1:/s/ida.*//p"
  17. }
  18. get_dev_number_rd() {
  19. grep '^ */dev/rd/' /proc/rd/*/initial_status | cat -n | \
  20. sed -n "/rd\/$1:/s/\/dev\/rd.*//p"
  21. }
  22. get_dev_number() {
  23. dev=$1
  24. num=$(eval $(echo get_dev_number_$TYPE $dev))
  25. [ "$num" ] || exit 1
  26. echo $(($num - 1))
  27. }
  28. TYPE=${1%%/*}
  29. NAME=${1#*/}
  30. # abort if there was no match
  31. [ "$TYPE" != "$1" ] || exit 1
  32. case "$NAME" in
  33. *p*)
  34. LONG_NAME=disc$(get_dev_number ${NAME%%p*})/part${NAME##*p}
  35. ;;
  36. *)
  37. LONG_NAME=disc$(get_dev_number $NAME)/disc
  38. ;;
  39. esac
  40. echo "$TYPE/$LONG_NAME"
  41. exit 0