From 483e770b4302fc7e3384982657500221e0ec327d Mon Sep 17 00:00:00 2001 From: Harald Hoyer 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 }