summaryrefslogtreecommitdiff
path: root/sys-fs/zfs/files/2.1.5-dracut-non-root.patch
blob: 6d1caf92cd2d2d03ef47141679e06b30c5df87f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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