83 lines
2.5 KiB
Diff
83 lines
2.5 KiB
Diff
|
From c81d6422d71b02ed9158a67c00fa0a5eec232f37 Mon Sep 17 00:00:00 2001
|
||
|
From: Philipp Rudo <prudo@redhat.com>
|
||
|
Date: Thu, 25 Jul 2024 12:47:00 +0200
|
||
|
Subject: [PATCH 16/24] fix(dracut-init.sh): add module to mods_to_load before
|
||
|
checking dependencies
|
||
|
|
||
|
When implementing erofs support for 99squash we end up with three
|
||
|
modules 99squash, 95squash-squashfs and 95squash-erofs. Where 99squash
|
||
|
contains the common code for filesystem images and
|
||
|
95squash-{squashfs,erofs} the special handing depending on the
|
||
|
filesystem used. This leads to a dependency cycle as we want to allow
|
||
|
users both to choose 99squash, when the exact filesystem doesn't matter,
|
||
|
as well as 95squash-{squashfs,erofs} when a specific filesystem is
|
||
|
required.
|
||
|
|
||
|
But when 99squash is added as a dependency calling
|
||
|
dracut_module_included fails in its depends() function. This lead to
|
||
|
cases where both handlers, 95squash-squashfs and 95squash-erofs, were
|
||
|
added to the initrd.
|
||
|
|
||
|
Reason for the failure is that a module only is marked to be loaded
|
||
|
after all it's dependencies have been checked as well. Thus a child
|
||
|
module cannot detect which parent module wants it to be included. Fix
|
||
|
this by marking modules to be loaded before checking its dependencies in
|
||
|
check_module. Do the same change in check_mount for consistency.
|
||
|
|
||
|
Signed-off-by: Philipp Rudo <prudo@redhat.com>
|
||
|
|
||
|
(cherry picked from commit 634b4a5c6fbe595eb240cd529d669d21eadd510c)
|
||
|
|
||
|
Related: RHEL-43460
|
||
|
---
|
||
|
dracut-init.sh | 12 ++++++------
|
||
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/dracut-init.sh b/dracut-init.sh
|
||
|
index 58e657b5..840c6167 100755
|
||
|
--- a/dracut-init.sh
|
||
|
+++ b/dracut-init.sh
|
||
|
@@ -915,6 +915,9 @@ check_mount() {
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
+ [[ " $mods_to_load " == *\ $_mod\ * ]] \
|
||
|
+ || mods_to_load+=" $_mod "
|
||
|
+
|
||
|
for _moddep in $(module_depends "$_mod" "$_moddir"); do
|
||
|
# handle deps as if they were manually added
|
||
|
[[ " $dracutmodules " == *\ $_mod\ * ]] \
|
||
|
@@ -933,9 +936,6 @@ check_mount() {
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
- [[ " $mods_to_load " == *\ $_mod\ * ]] \
|
||
|
- || mods_to_load+=" $_mod "
|
||
|
-
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
@@ -990,6 +990,9 @@ check_module() {
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
+ [[ " $mods_to_load " == *\ $_mod\ * ]] \
|
||
|
+ || mods_to_load+=" $_mod "
|
||
|
+
|
||
|
for _moddep in $(module_depends "$_mod" "$_moddir"); do
|
||
|
# handle deps as if they were manually added
|
||
|
[[ " $dracutmodules " == *\ $_mod\ * ]] \
|
||
|
@@ -1008,9 +1011,6 @@ check_module() {
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
- [[ " $mods_to_load " == *\ $_mod\ * ]] \
|
||
|
- || mods_to_load+=" $_mod "
|
||
|
-
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.42.0
|
||
|
|