Blob Blame History Raw
From 483e770b4302fc7e3384982657500221e0ec327d Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald@redhat.com>
Date: Fri, 22 Jun 2012 15:30:58 +0200
Subject: [PATCH] iscsi/module-setup.sh: speedup installkernel()

---
 modules.d/95iscsi/module-setup.sh |   40 ++++++++++++++++++++++++++++---------
 1 file changed, 31 insertions(+), 9 deletions(-)

diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh
index fefc240..5f935d7 100755
--- a/modules.d/95iscsi/module-setup.sh
+++ b/modules.d/95iscsi/module-setup.sh
@@ -41,16 +41,38 @@ installkernel() {
 
     instmods iscsi_tcp iscsi_ibft crc32c bnx2i iscsi_boot_sysfs qla4xxx cxgb3i cxgb4i be2iscsi
     iscsi_module_filter() {
-        local _iscsifuncs='iscsi_register_transport'
-        local _f
-        while read _f; do case "$_f" in
-            *.ko)    [[ $(<         $_f) =~ $_iscsifuncs ]] && echo "$_f" ;;
-            *.ko.gz) [[ $(gzip -dc <$_f) =~ $_iscsifuncs ]] && echo "$_f" ;;
-            *.ko.xz) [[ $(xz -dc   <$_f) =~ $_iscsifuncs ]] && echo "$_f" ;;
-            esac
-        done
-        return 0;
+        local _funcs='iscsi_register_transport'
+        # 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;} \
     | iscsi_module_filter  |  instmods
 }