summaryrefslogtreecommitdiff
path: root/sys-fs/zfs/files/2.1.5-dracut-non-root.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-fs/zfs/files/2.1.5-dracut-non-root.patch')
-rw-r--r--sys-fs/zfs/files/2.1.5-dracut-non-root.patch33
1 files changed, 33 insertions, 0 deletions
diff --git a/sys-fs/zfs/files/2.1.5-dracut-non-root.patch b/sys-fs/zfs/files/2.1.5-dracut-non-root.patch
new file mode 100644
index 000000000000..6d1caf92cd2d
--- /dev/null
+++ b/sys-fs/zfs/files/2.1.5-dracut-non-root.patch
@@ -0,0 +1,33 @@
+https://github.com/openzfs/zfs/pull/13589
+https://bugs.gentoo.org/854333
+
+From ef9d996669cc2ec596d4e90753b89b32a3f0ce59 Mon Sep 17 00:00:00 2001
+From: "Andrew J. Hesford" <ajh@sideband.org>
+Date: Fri, 24 Jun 2022 11:05:53 -0400
+Subject: [PATCH] Dracut module: fix parsing of root= kernel command-line
+ argument
+
+Some Dracut modules may read the `root=` kernel command-line argument
+and rewrite it; in particular, `rootfs-block` installs a command-line
+hook that to canonicalize arguments that specify block devices. If the
+`zfs` module is added to an initramfs (which it is, by default, as long
+as the core ZFS utilities are available) on a system that does not use a
+ZFS root filesystem, the `zfs` module will overwrite the `root` shell
+variable with the contents of the kernel command-line in the process of
+determining if it should control mounting the root. This breaks the
+initramfs. To solve this problem, only parse the kernel command-line
+directly if the `root` shell variable is empty; otherwise, rely on the
+parsing (and possible rewriting) done by other modules.
+
+Signed-off-by: Andrew J. Hesford <ajh@sideband.org>
+--- a/contrib/dracut/90zfs/zfs-lib.sh.in
++++ b/contrib/dracut/90zfs/zfs-lib.sh.in
+@@ -88,7 +88,7 @@ decode_root_args() {
+ return
+ fi
+
+- root=$(getarg root=)
++ [ -n "$root" ] || root=$(getarg root=)
+ rootfstype=$(getarg rootfstype=)
+
+ # shellcheck disable=SC2249