]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
multipath/module-setup.sh:installkernel() fix return code
authorHarald Hoyer <harald@redhat.com>
Fri, 22 Jun 2012 13:33:15 +0000 (15:33 +0200)
committerHarald Hoyer <harald@redhat.com>
Fri, 29 Jun 2012 10:41:26 +0000 (12:41 +0200)
modules.d/90multipath/module-setup.sh

index 0e8857cba1338b46e1e266a13475dd4656e959b8..87915604a2411e407cfc839e0f75639409cf19cb 100755 (executable)
@@ -32,23 +32,42 @@ depends() {
 
 installkernel() {
     local _ret
-    set +x
+    local _arch=$(uname -m)
     mp_mod_filter() {
-        local _mpfuncs='scsi_register_device_handler|dm_dirty_log_type_register|dm_register_path_selector|dm_register_target'
-        local _f
-        while read _f; do case "$_f" in
-            *.ko)    [[ $(<         $_f) =~ $_mpfuncs ]] && echo "$_f" ;;
-            *.ko.gz) [[ $(gzip -dc <$_f) =~ $_mpfuncs ]] && echo "$_f" ;;
-            *.ko.xz) [[ $(xz -dc   <$_f) =~ $_mpfuncs ]] && echo "$_f" ;;
-            esac
-        done
+        local _funcs='scsi_register_device_handler|dm_dirty_log_type_register|dm_register_path_selector|dm_register_target'
+        # subfunctions inherit following FDs
+        local _merge=8 _side2=9
+        function bmf1() {
+            local _f
+            while read _f; do
+                case "$_f" in
+                    *.ko)    [[ $(<         $_f) =~ $_funcs ]] && echo "$_f" ;;
+                    *.ko.gz) [[ $(gzip -dc <$_f) =~ $_funcs ]] && echo "$_f" ;;
+                    *.ko.xz) [[ $(xz -dc   <$_f) =~ $_funcs ]] && echo "$_f" ;;
+                esac
+            done
+            return 0
+        }
+
+        function rotor() {
+            local _f1 _f2
+            while read _f1; do
+                echo "$_f1"
+                if read _f2; then
+                    echo "$_f2" 1>&${_side2}
+                fi
+            done | bmf1 1>&${_merge}
+            return 0
+        }
+        # Use two parallel streams to filter alternating modules.
+        set +x
+        eval "( ( rotor ) ${_side2}>&1 | bmf1 ) ${_merge}>&1"
+        [[ $debug ]] && set -x
+        return 0
     }
 
     ( find_kernel_modules_by_path drivers/scsi; if [ "$_arch" = "s390" -o "$_arch" = "s390x" ]; then find_kernel_modules_by_path drivers/s390/scsi; fi;
       find_kernel_modules_by_path drivers/md )  |  mp_mod_filter  |  instmods
-    _ret=$?
-    [[ $debug ]] && set -x
-    return $_ret
 }
 
 install() {