From e27f3303982c76fbcb9c6f1f227c6eb16d60dcce Mon Sep 17 00:00:00 2001 From: Harald Hoyer <harald@redhat.com> Date: Mon, 2 Aug 2010 09:40:18 +0200 Subject: [PATCH 101/133] dracut-functions: fix check=255 logic and dependencies --- dracut-functions | 24 ++++++++++++++++-------- 1 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dracut-functions b/dracut-functions index de0c81d..978e4f0 100755 --- a/dracut-functions +++ b/dracut-functions @@ -357,7 +357,8 @@ dracut_install() { check_module_deps() { local moddir dep ret # if we are already set to be loaded, we do not have to be checked again. - strstr "$mods_to_load" " $1 " && return + strstr " $mods_to_load " " $1 " && return + strstr " $omit_dracutmodules " " $1 " && return 1 # turn a module name into a directory, if we can. moddir=$(echo ${dracutbasedir}/modules.d/??${1}) [[ -d $moddir && -x $moddir/install ]] || return 1 @@ -378,13 +379,14 @@ check_module_deps() { should_source_module() { local dep + local ret if [[ $kernel_only = yes ]]; then [[ -x $1/installkernel ]] && return 0 return 1 fi [[ -x $1/install ]] || [[ -x $1/installkernel ]] || return 1 [[ -x $1/check ]] || return 0 - "$1/check" $hostonly || return 1 + "$1/check" $hostonly || continue for dep in $("$1/check" -d); do check_module_deps "$dep" && continue dwarning "Cannot load $mod, dependencies failed." @@ -398,13 +400,11 @@ check_modules() { for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do local mod=${moddir##*/}; mod=${mod#[0-9][0-9]} # If we are already scheduled to be loaded, no need to check again. - strstr "$mods_to_load" " $mod " && continue + strstr " $mods_to_load " " $mod " && continue # This should never happen, but... [[ -d $moddir ]] || continue - strstr "$omit_dracutmodules" "$mod" && continue - - if ! strstr "$dracutmodules $add_dracutmodules" "$mod"; then + if ! strstr " $dracutmodules $add_dracutmodules " " $mod "; then # module not in our list if [[ $dracutmodules = all ]]; then # check, if we can install this module @@ -413,6 +413,14 @@ check_modules() { # skip this module continue fi + else + if [ -x "$moddir/check" ] \ + && "$moddir/check" -d > /dev/null 2>&1; then + check_module_deps "$mod" || { + dwarning "Cannot load dracut module \"$mod\", dependencies failed." + continue + } + fi fi mods_to_load+=" $mod " @@ -421,8 +429,8 @@ check_modules() { modcheck=$add_dracutmodules [[ $dracutmodules != all ]] && modcheck="$m $dracutmodules" for mod in $modcheck; do - strstr "$mods_to_load" "$mod" && continue - strstr "$omit_dracutmodules" "$mod" && continue + strstr " $mods_to_load " " $mod " && continue + strstr " $omit_dracutmodules " " $mod " && continue dwarning "Dracut module \"$mod\" cannot be found." done } -- 1.7.3