]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
dmraid/mdraid: improve hostonly recognition
authorHarald Hoyer <harald@redhat.com>
Mon, 26 Aug 2013 12:04:56 +0000 (14:04 +0200)
committerHarald Hoyer <harald@redhat.com>
Mon, 26 Aug 2013 12:04:56 +0000 (14:04 +0200)
Factor out get_devpath_block(), which also fixes a dmraid hostonly bug.

Also only include dmraid and mdraid, if they are actually in use.

dracut-functions.sh
modules.d/90dmraid/module-setup.sh
modules.d/90mdraid/module-setup.sh

index c89d81685709fd64470f7b10054e8bbaa5ca329f..9b244190b7d419980c059c041be239d525934389 100755 (executable)
@@ -296,6 +296,23 @@ get_maj_min() {
     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
index 2d73963aa37b4292920fbb0efaf2e1d623506116..11181cf5e84d5747082fb9010f2516c4f0c3d00e 100755 (executable)
@@ -9,8 +9,17 @@ check() {
     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
     }
@@ -31,16 +40,7 @@ cmdline() {
         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
index 2bedbfd7a997173fbf698ba4ae97c626dd50e0cf..5df2274b3acd8e6156fc04b7982223c0d2866843 100755 (executable)
@@ -8,8 +8,17 @@ check() {
     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
     }