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
