printf "%s" "$((0x${_majmin%:*})):$((0x${_majmin#*:}))"
}
+
+# get_devpath_block <device>
+# get the DEVPATH in /sys of a block device
+get_devpath_block() {
+ local majmin i
+ _majmin=$(get_maj_min "$1")
+
+ for _i in /sys/block/*/dev /sys/block/*/*/dev; do
+ [[ -e "$_i" ]] || continue
+ if [[ "$_majmin" == "$(<"$_i")" ]]; then
+ printf "%s" "${_i%/dev}"
+ return 0
+ fi
+ done
+ return 1
+}
+
# get a persistent path from a device
get_persistent_dev() {
local i _tmp _dev
type -P dmraid >/dev/null || return 1
[[ $hostonly ]] || [[ $mount_needs ]] && {
- for fs in "${host_fs_types[@]}"; do
- [[ $fs = *_raid_member ]] && return 0
+ for dev in "${!host_fs_types[@]}"; do
+ [[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue
+
+ DEVPATH=$(get_devpath_block "$dev")
+
+ for holder in "$DEVPATH"/holders/*; do
+ [[ -e "$holder" ]] || continue
+ [[ -e "$holder/dm" ]] && return 0
+ break
+ done
+
done
return 255
}
local holder DEVPATH DM_NAME majmin
[[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue
- majmin=$(get_maj_min $dev)
- DEVPATH=$(
- for i in /sys/block/*; do
- [[ -e "$i/dev" ]] || continue
- if [[ $a == $(<"$i/dev") ]]; then
- printf "%s" "$i"
- break
- fi
- done
- )
+ DEVPATH=$(get_devpath_block "$dev")
for holder in "$DEVPATH"/holders/*; do
[[ -e "$holder" ]] || continue
type -P mdadm >/dev/null || return 1
[[ $hostonly ]] || [[ $mount_needs ]] && {
- for fs in "${host_fs_types[@]}"; do
- [[ "$fs" == *_raid_member ]] && return 0
+ for dev in "${!host_fs_types[@]}"; do
+ [[ "${host_fs_types[$dev]}" != *_raid_member ]] && continue
+
+ DEVPATH=$(get_devpath_block "$dev")
+
+ for holder in "$DEVPATH"/holders/*; do
+ [[ -e "$holder" ]] || continue
+ [[ -e "$holder/md" ]] && return 0
+ break
+ done
+
done
return 255
}