From 4073c8159c5e97b649ee3deec744b1b04c48d39a Mon Sep 17 00:00:00 2001 From: Harald Hoyer Date: Fri, 12 Aug 2011 10:29:00 +0200 Subject: [PATCH] add filter_kernel_modules_by_path() to speed up module search --- dracut-functions | 30 +++++++++++++++++++++++++++ modules.d/40network/module-setup.sh | 2 +- modules.d/90multipath/module-setup.sh | 3 ++- modules.d/95iscsi/module-setup.sh | 2 +- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/dracut-functions b/dracut-functions index 991e0ebc9..d44695937 100755 --- a/dracut-functions +++ b/dracut-functions @@ -810,6 +810,36 @@ for_each_kmod_dep() { return $? } +# filter kernel modules to install certain modules that meet specific +# requirements. +# $1 = search only in subdirectory of /kernel/$1 +# $2 = function to call with module name to filter. +# This function will be passed the full path to the module to test. +# The behaviour of this function can vary depending on whether $hostonly is set. +# If it is, we will only look at modules that are already in memory. +# If it is not, we will look at all kernel modules +# This function returns the full filenames of modules that match $1 +filter_kernel_modules_by_path () ( + local _modname _filtercmd + if ! [[ $hostonly ]]; then + _filtercmd='find "$srcmods/kernel/$1" "$srcmods/extra"' + _filtercmd+=' "$srcmods/weak-updates" -name "*.ko" -o -name "*.ko.gz"' + _filtercmd+=' 2>/dev/null' + else + _filtercmd='cut -d " " -f 1 $initdir/$$.ko + $2 $initdir/$$.ko && echo "$_modname" + rm -f $initdir/$$.ko + ;; + esac + done +) + # filter kernel modules to install certain modules that meet specific # requirements. # $1 = function to call with module name to filter. diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh index 331354040..1cb7ebcf4 100755 --- a/modules.d/40network/module-setup.sh +++ b/modules.d/40network/module-setup.sh @@ -32,7 +32,7 @@ installkernel() { [[ ! $1 =~ $_unwanted_drivers ]] } - instmods $(filter_kernel_modules net_module_test) + instmods $(filter_kernel_modules_by_path drivers/net net_module_test) instmods ecb arc4 # bridge modules diff --git a/modules.d/90multipath/module-setup.sh b/modules.d/90multipath/module-setup.sh index 285218b3a..e9a47fc82 100755 --- a/modules.d/90multipath/module-setup.sh +++ b/modules.d/90multipath/module-setup.sh @@ -38,7 +38,8 @@ installkernel() { egrep -q "$mpfuncs" "$1" } - instmods $(filter_kernel_modules mp_mod_test) + instmods $(filter_kernel_modules_by_path drivers/scsi mp_mod_test) + instmods $(filter_kernel_modules_by_path drivers/md mp_mod_test) } install() { diff --git a/modules.d/95iscsi/module-setup.sh b/modules.d/95iscsi/module-setup.sh index b25d422c4..3db40eafc 100755 --- a/modules.d/95iscsi/module-setup.sh +++ b/modules.d/95iscsi/module-setup.sh @@ -46,7 +46,7 @@ installkernel() { local _iscsifuncs='iscsi_register_transport' fgrep -q "$_iscsifuncs" "$1" } - instmods $(filter_kernel_modules iscsi_module_test) + instmods $(filter_kernel_modules_by_path drivers/scsi iscsi_module_test) } install() { -- 2.47.3