Blame 0027-Check-module-dependencies-of-mount-points.patch

Harald Hoyer 3957aa
From 1b7fd0fa3eded954ed5baad7aee49507a607275b Mon Sep 17 00:00:00 2001
Harald Hoyer 3957aa
From: Cong Wang <xiyou.wangcong@gmail.com>
Harald Hoyer 3957aa
Date: Tue, 20 Dec 2011 14:09:57 +0800
Harald Hoyer 3957aa
Subject: [PATCH] Check module dependencies of mount points
Harald Hoyer 3957aa
Harald Hoyer 3957aa
Like -H, we need to poll every module to check if it is needed
Harald Hoyer 3957aa
to mount a specific device in '--mount'.
Harald Hoyer 3957aa
Harald Hoyer 3957aa
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Harald Hoyer 3957aa
---
Harald Hoyer 3957aa
 dracut                                  |    5 ++-
Harald Hoyer 3957aa
 dracut-functions                        |   68 +++++++++++++++++++++++++++++-
Harald Hoyer 3957aa
 modules.d/00bootchart/module-setup.sh   |    1 +
Harald Hoyer 3957aa
 modules.d/10i18n/module-setup.sh        |    1 +
Harald Hoyer 3957aa
 modules.d/10rpmversion/module-setup.sh  |    1 +
Harald Hoyer 3957aa
 modules.d/50plymouth/module-setup.sh    |    1 +
Harald Hoyer 3957aa
 modules.d/90btrfs/module-setup.sh       |    2 +-
Harald Hoyer 3957aa
 modules.d/90crypt/module-setup.sh       |    2 +-
Harald Hoyer 3957aa
 modules.d/90dmraid/module-setup.sh      |    2 +-
Harald Hoyer 3957aa
 modules.d/90lvm/module-setup.sh         |    2 +-
Harald Hoyer 3957aa
 modules.d/90mdraid/module-setup.sh      |    2 +-
Harald Hoyer 3957aa
 modules.d/95fcoe/module-setup.sh        |    2 +-
Harald Hoyer 3957aa
 modules.d/95nfs/module-setup.sh         |    2 +-
Harald Hoyer 3957aa
 modules.d/97biosdevname/module-setup.sh |    1 +
Harald Hoyer 3957aa
 modules.d/98usrmount/module-setup.sh    |    1 +
Harald Hoyer 3957aa
 15 files changed, 82 insertions(+), 11 deletions(-)
Harald Hoyer 3957aa
Harald Hoyer 3957aa
diff --git a/dracut b/dracut
Harald Hoyer 3957aa
index 04dc8ec..c3584c0 100755
Harald Hoyer 3957aa
--- a/dracut
Harald Hoyer 3957aa
+++ b/dracut
Harald Hoyer 3957aa
@@ -633,9 +633,12 @@ else
Harald Hoyer 3957aa
     done
Harald Hoyer 3957aa
 fi
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
+mods_to_load=""
Harald Hoyer 3957aa
 # check all our modules to see if they should be sourced.
Harald Hoyer 3957aa
 # This builds a list of modules that we will install next.
Harald Hoyer 3957aa
-check_module_dir
Harald Hoyer 3957aa
+for_each_module_dir check_module
Harald Hoyer 3957aa
+for_each_module_dir check_mount
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
 modules_loaded=" "
Harald Hoyer 3957aa
 # source our modules.
Harald Hoyer 3957aa
 for moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
Harald Hoyer 3957aa
diff --git a/dracut-functions b/dracut-functions
Harald Hoyer 3957aa
index 8944430..2f9e713 100755
Harald Hoyer 3957aa
--- a/dracut-functions
Harald Hoyer 3957aa
+++ b/dracut-functions
Harald Hoyer 3957aa
@@ -783,6 +783,67 @@ module_installkernel() {
Harald Hoyer 3957aa
     fi
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
+module_check_mount() {
Harald Hoyer 3957aa
+    local _moddir=$(echo ${dracutbasedir}/modules.d/??${1})
Harald Hoyer 3957aa
+    local _ret
Harald Hoyer 3957aa
+    mount_needs=1
Harald Hoyer 3957aa
+    [[ -d $_moddir ]] || return 1
Harald Hoyer 3957aa
+    if [[ ! -f $_moddir/module-setup.sh ]]; then
Harald Hoyer 3957aa
+        # if we do not have a check script, we are unconditionally included
Harald Hoyer 3957aa
+        [[ -x $_moddir/check ]] || return 0
Harald Hoyer 3957aa
+        mount_needs=1 $_moddir/check 0
Harald Hoyer 3957aa
+        _ret=$?
Harald Hoyer 3957aa
+    else
Harald Hoyer 3957aa
+        unset check depends install installkernel
Harald Hoyer 3957aa
+        . $_moddir/module-setup.sh
Harald Hoyer 3957aa
+        is_func check || return 1
Harald Hoyer 3957aa
+        check 0
Harald Hoyer 3957aa
+        _ret=$?
Harald Hoyer 3957aa
+        unset check depends install installkernel
Harald Hoyer 3957aa
+    fi
Harald Hoyer 3957aa
+    unset mount_needs
Harald Hoyer 3957aa
+    return $_ret
Harald Hoyer 3957aa
+}
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+check_mount() {
Harald Hoyer 3957aa
+    local _mod=$1
Harald Hoyer 3957aa
+    local _moddir=$(echo ${dracutbasedir}/modules.d/??${1})
Harald Hoyer 3957aa
+    local _ret
Harald Hoyer 3957aa
+    local _moddep
Harald Hoyer 3957aa
+    # If we are already scheduled to be loaded, no need to check again.
Harald Hoyer 3957aa
+    strstr " $mods_to_load " " $_mod " && return 0
Harald Hoyer 3957aa
+    strstr " $mods_checked_as_dep " " $_mod " && return 1
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    # This should never happen, but...
Harald Hoyer 3957aa
+    [[ -d $_moddir ]] || return 1
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    [[ $2 ]] || mods_checked_as_dep+=" $_mod "
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    strstr " $omit_dracutmodules " " $_mod " && return 1
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    if [ "${#host_fs_types[*]}" -gt 0 ]; then
Harald Hoyer 3957aa
+        module_check_mount $_mod || return 1
Harald Hoyer 3957aa
+    else
Harald Hoyer 3957aa
+        # skip this module
Harald Hoyer 3957aa
+        return 1
Harald Hoyer 3957aa
+    fi
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    for _moddep in $(module_depends $_mod); do
Harald Hoyer 3957aa
+        # handle deps as if they were manually added
Harald Hoyer 3957aa
+        strstr " $add_dracutmodules " " $_moddep " || \
Harald Hoyer 3957aa
+            add_dracutmodules+=" $_moddep "
Harald Hoyer 3957aa
+        strstr " $force_add_dracutmodules " " $_moddep " || \
Harald Hoyer 3957aa
+            force_add_dracutmodules+=" $_moddep "
Harald Hoyer 3957aa
+        # if a module we depend on fail, fail also
Harald Hoyer 3957aa
+        check_module $_moddep || return 1
Harald Hoyer 3957aa
+    done
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    strstr " $mods_to_load " " $_mod " || \
Harald Hoyer 3957aa
+        mods_to_load+=" $_mod "
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
+    return 0
Harald Hoyer 3957aa
+}
Harald Hoyer 3957aa
+
Harald Hoyer 3957aa
 check_module() {
Harald Hoyer 3957aa
     local _mod=$1
Harald Hoyer 3957aa
     local _moddir=$(echo ${dracutbasedir}/modules.d/??${1})
Harald Hoyer 3957aa
@@ -834,14 +895,15 @@ check_module() {
Harald Hoyer 3957aa
     return 0
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-check_module_dir() {
Harald Hoyer 3957aa
+for_each_module_dir() {
Harald Hoyer 3957aa
     local _modcheck
Harald Hoyer 3957aa
     local _mod
Harald Hoyer 3957aa
     local _moddir
Harald Hoyer 3957aa
-    mods_to_load=""
Harald Hoyer 3957aa
+    local _func
Harald Hoyer 3957aa
+    _func=$1
Harald Hoyer 3957aa
     for _moddir in "$dracutbasedir/modules.d"/[0-9][0-9]*; do
Harald Hoyer 3957aa
         _mod=${_moddir##*/}; _mod=${_mod#[0-9][0-9]}
Harald Hoyer 3957aa
-        check_module $_mod 1
Harald Hoyer 3957aa
+        $_func $_mod 1
Harald Hoyer 3957aa
     done
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
     # Report any missing dracut modules, the user has specified
Harald Hoyer 3957aa
diff --git a/modules.d/00bootchart/module-setup.sh b/modules.d/00bootchart/module-setup.sh
Harald Hoyer 3957aa
index bf71b14..17dd137 100755
Harald Hoyer 3957aa
--- a/modules.d/00bootchart/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/00bootchart/module-setup.sh
Harald Hoyer 3957aa
@@ -3,6 +3,7 @@
Harald Hoyer 3957aa
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
 check() {
Harald Hoyer 3957aa
+    [[ "$mount_needs" ]] && return 1
Harald Hoyer 3957aa
     [ -x /sbin/bootchartd ] || return 1
Harald Hoyer 3957aa
     return 255
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh
Harald Hoyer 3957aa
index 8342fb4..37c7c09 100755
Harald Hoyer 3957aa
--- a/modules.d/10i18n/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/10i18n/module-setup.sh
Harald Hoyer 3957aa
@@ -3,6 +3,7 @@
Harald Hoyer 3957aa
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
 check() {
Harald Hoyer 3957aa
+    [[ "$mount_needs" ]] && return 1
Harald Hoyer 3957aa
     return 0
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
diff --git a/modules.d/10rpmversion/module-setup.sh b/modules.d/10rpmversion/module-setup.sh
Harald Hoyer 3957aa
index 676775f..4c021ad 100755
Harald Hoyer 3957aa
--- a/modules.d/10rpmversion/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/10rpmversion/module-setup.sh
Harald Hoyer 3957aa
@@ -3,6 +3,7 @@
Harald Hoyer 3957aa
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
 check() {
Harald Hoyer 3957aa
+    [[ "$mount_needs" ]] && return 1
Harald Hoyer 3957aa
     [ -f /etc/redhat-release ]
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
diff --git a/modules.d/50plymouth/module-setup.sh b/modules.d/50plymouth/module-setup.sh
Harald Hoyer 3957aa
index df0e8d6..eedc842 100755
Harald Hoyer 3957aa
--- a/modules.d/50plymouth/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/50plymouth/module-setup.sh
Harald Hoyer 3957aa
@@ -3,6 +3,7 @@
Harald Hoyer 3957aa
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
 check() {
Harald Hoyer 3957aa
+    [[ "$mount_needs" ]] && return 1
Harald Hoyer 3957aa
     [[ -x /sbin/plymouthd && -x /bin/plymouth && -x /usr/sbin/plymouth-set-default-theme ]]
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
diff --git a/modules.d/90btrfs/module-setup.sh b/modules.d/90btrfs/module-setup.sh
Harald Hoyer 3957aa
index d4abbaf..a141dda 100755
Harald Hoyer 3957aa
--- a/modules.d/90btrfs/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/90btrfs/module-setup.sh
Harald Hoyer 3957aa
@@ -11,7 +11,7 @@ check() {
Harald Hoyer 3957aa
     . $dracutfunctions
Harald Hoyer 3957aa
     [[ $debug ]] && set -x
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-    [[ $hostonly ]] && {
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && {
Harald Hoyer 3957aa
         local _found
Harald Hoyer 3957aa
         for fs in $host_fs_types; do
Harald Hoyer 3957aa
             [[ "$fs" = "|btrfs" ]] && _found="1"
Harald Hoyer 3957aa
diff --git a/modules.d/90crypt/module-setup.sh b/modules.d/90crypt/module-setup.sh
Harald Hoyer 3957aa
index 42c6b48..a92c187 100755
Harald Hoyer 3957aa
--- a/modules.d/90crypt/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/90crypt/module-setup.sh
Harald Hoyer 3957aa
@@ -23,7 +23,7 @@ check() {
Harald Hoyer 3957aa
         echo " rd.luks.uuid=${ID_FS_UUID} " >> "${initdir}/etc/cmdline.d/90crypt.conf"
Harald Hoyer 3957aa
     }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-    [[ $hostonly ]] && {
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && {
Harald Hoyer 3957aa
         [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
Harald Hoyer 3957aa
         for_each_host_dev_fs check_crypt
Harald Hoyer 3957aa
         [ -f "${initdir}/etc/cmdline.d/90crypt.conf" ] || return 1
Harald Hoyer 3957aa
diff --git a/modules.d/90dmraid/module-setup.sh b/modules.d/90dmraid/module-setup.sh
Harald Hoyer 3957aa
index 9de6c63..19f2ce6 100755
Harald Hoyer 3957aa
--- a/modules.d/90dmraid/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/90dmraid/module-setup.sh
Harald Hoyer 3957aa
@@ -38,7 +38,7 @@ check() {
Harald Hoyer 3957aa
         echo " rd.dm.uuid=${DM_NAME} " >> "${initdir}/etc/cmdline.d/90dmraid.conf"
Harald Hoyer 3957aa
     }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-    [[ $hostonly ]] && {
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && {
Harald Hoyer 3957aa
         [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
Harald Hoyer 3957aa
         for_each_host_dev_fs check_dmraid
Harald Hoyer 3957aa
         [ -f "${initdir}/etc/cmdline.d/90dmraid.conf" ] || return 1
Harald Hoyer 3957aa
diff --git a/modules.d/90lvm/module-setup.sh b/modules.d/90lvm/module-setup.sh
Harald Hoyer 3957aa
index 87751cb..c910f13 100755
Harald Hoyer 3957aa
--- a/modules.d/90lvm/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/90lvm/module-setup.sh
Harald Hoyer 3957aa
@@ -23,7 +23,7 @@ check() {
Harald Hoyer 3957aa
         echo " rd.lvm.lv=${DM_LV_NAME} " >> "${initdir}/etc/cmdline.d/90lvm.conf"
Harald Hoyer 3957aa
     }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-    [[ $hostonly ]] && {
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && {
Harald Hoyer 3957aa
         [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
Harald Hoyer 3957aa
         for_each_host_dev_fs check_lvm
Harald Hoyer 3957aa
         [ -f "${initdir}/etc/cmdline.d/90lvm.conf" ] || return 1
Harald Hoyer 3957aa
diff --git a/modules.d/90mdraid/module-setup.sh b/modules.d/90mdraid/module-setup.sh
Harald Hoyer 3957aa
index 05e0127..8c3e2bb 100755
Harald Hoyer 3957aa
--- a/modules.d/90mdraid/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/90mdraid/module-setup.sh
Harald Hoyer 3957aa
@@ -38,7 +38,7 @@ check() {
Harald Hoyer 3957aa
         echo " rd.md.uuid=${MD_UUID} " >> "${initdir}/etc/cmdline.d/90mdraid.conf"
Harald Hoyer 3957aa
     }
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-    [[ $hostonly ]] && {
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && {
Harald Hoyer 3957aa
         [[ -d "${initdir}/etc/cmdline.d" ]] || mkdir -p "${initdir}/etc/cmdline.d"
Harald Hoyer 3957aa
         for_each_host_dev_fs check_mdraid
Harald Hoyer 3957aa
         [[ -f "${initdir}/etc/cmdline.d/90mdraid.conf" ]] || return 1
Harald Hoyer 3957aa
diff --git a/modules.d/95fcoe/module-setup.sh b/modules.d/95fcoe/module-setup.sh
Harald Hoyer 3957aa
index b4cee97..e66798b 100755
Harald Hoyer 3957aa
--- a/modules.d/95fcoe/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/95fcoe/module-setup.sh
Harald Hoyer 3957aa
@@ -6,7 +6,7 @@ check() {
Harald Hoyer 3957aa
     # FIXME
Harald Hoyer 3957aa
     # If hostonly was requested, fail the check until we have some way of
Harald Hoyer 3957aa
     # knowing we are booting from FCoE
Harald Hoyer 3957aa
-    [[ $hostonly ]] && return 1
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && return 1
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
     return 0
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
diff --git a/modules.d/95nfs/module-setup.sh b/modules.d/95nfs/module-setup.sh
Harald Hoyer 3957aa
index bb3b793..641d917 100755
Harald Hoyer 3957aa
--- a/modules.d/95nfs/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/95nfs/module-setup.sh
Harald Hoyer 3957aa
@@ -7,7 +7,7 @@ check() {
Harald Hoyer 3957aa
     type -P rpcbind >/dev/null || type -P portmap >/dev/null || return 1
Harald Hoyer 3957aa
     type -P rpc.statd mount.nfs mount.nfs4 umount >/dev/null || return 1
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
-    [[ $hostonly ]] && {
Harald Hoyer 3957aa
+    [[ $hostonly ]] || [[ $mount_needs ]] && {
Harald Hoyer 3957aa
         for fs in ${host_fs_types[@]}; do
Harald Hoyer 3957aa
             strstr "$fs" "|nfs"  && return 0
Harald Hoyer 3957aa
             strstr "$fs" "|nfs3" && return 0
Harald Hoyer 3957aa
diff --git a/modules.d/97biosdevname/module-setup.sh b/modules.d/97biosdevname/module-setup.sh
Harald Hoyer 3957aa
index 834831f..4d492a9 100755
Harald Hoyer 3957aa
--- a/modules.d/97biosdevname/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/97biosdevname/module-setup.sh
Harald Hoyer 3957aa
@@ -3,6 +3,7 @@
Harald Hoyer 3957aa
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
 check() {
Harald Hoyer 3957aa
+    [[ "$mount_needs" ]] && return 1
Harald Hoyer 3957aa
     type -P biosdevname >/dev/null || return 1
Harald Hoyer 3957aa
     return 0
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa
diff --git a/modules.d/98usrmount/module-setup.sh b/modules.d/98usrmount/module-setup.sh
Harald Hoyer 3957aa
index 8f7be10..5844383 100755
Harald Hoyer 3957aa
--- a/modules.d/98usrmount/module-setup.sh
Harald Hoyer 3957aa
+++ b/modules.d/98usrmount/module-setup.sh
Harald Hoyer 3957aa
@@ -3,6 +3,7 @@
Harald Hoyer 3957aa
 # ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 3957aa
 
Harald Hoyer 3957aa
 check() {
Harald Hoyer 3957aa
+    [[ $mount_needs ]] && return 1
Harald Hoyer 3957aa
     return 0
Harald Hoyer 3957aa
 }
Harald Hoyer 3957aa