Description: explicitly load the ZFS module via systemd service
Author: Ubuntu developers
Forward: no need
--- a/etc/systemd/system/Makefile.am
+++ b/etc/systemd/system/Makefile.am
@@ -4,6 +4,7 @@
 	50-zfs.preset
 
 systemdunit_DATA = \
+	zfs-load-module.service \
 	zfs-zed.service \
 	zfs-import-cache.service \
 	zfs-import-scan.service \
--- a/etc/systemd/system/zfs-import-cache.service.in
+++ b/etc/systemd/system/zfs-import-cache.service.in
@@ -3,7 +3,9 @@
 Documentation=man:zpool(8)
 DefaultDependencies=no
 Requires=systemd-udev-settle.service
+Requires=zfs-load-module.service
 After=systemd-udev-settle.service
+After=zfs-load-module.service
 After=cryptsetup.target
 After=multipathd.target
 After=systemd-remount-fs.service
--- a/etc/systemd/system/zfs-import-scan.service.in
+++ b/etc/systemd/system/zfs-import-scan.service.in
@@ -3,7 +3,9 @@
 Documentation=man:zpool(8)
 DefaultDependencies=no
 Requires=systemd-udev-settle.service
+Requires=zfs-load-module.service
 After=systemd-udev-settle.service
+Requires=zfs-load-module.service
 After=cryptsetup.target
 After=multipathd.target
 Before=zfs-import.target
--- /dev/null
+++ b/etc/systemd/system/zfs-load-module.service.in
@@ -0,0 +1,17 @@
+[Unit]
+Description=Install ZFS kernel module
+DefaultDependencies=no
+Requires=systemd-udev-settle.service
+After=systemd-udev-settle.service
+After=cryptsetup.target
+Before=dracut-mount.service
+After=systemd-remount-fs.service
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/sbin/modprobe zfs
+
+[Install]
+WantedBy=zfs-mount.service
+WantedBy=zfs.target
--- a/etc/systemd/system/50-zfs.preset.in
+++ b/etc/systemd/system/50-zfs.preset.in
@@ -7,3 +7,4 @@
 enable zfs-zed.service
 enable zfs-volume-wait.service
 enable zfs.target
+enable zfs-load-module.service
--- a/contrib/dracut/90zfs/module-setup.sh.in
+++ b/contrib/dracut/90zfs/module-setup.sh.in
@@ -95,6 +95,7 @@
 
 	if dracut_module_included "systemd"; then
 		mkdir -p "${initdir}/$systemdsystemunitdir/zfs-import.target.wants"
+		dracut_install @systemdunitdir@/zfs-load-module.service
 		for _item in scan cache ; do
 			dracut_install @systemdunitdir@/zfs-import-$_item.service
 			if ! [ -L "${initdir}/$systemdsystemunitdir/zfs-import.target.wants"/zfs-import-$_item.service ]; then
