aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2020-08-26 13:13:57 +0000
committerCy Schubert <cy@FreeBSD.org>2020-08-26 13:13:57 +0000
commit74e2b24f2c369ffdff2f54fa9f96427cc45ef3a6 (patch)
treec9c703e3048da92a1e6f9ffa49771a72a47422f7
parent1e9a0b391d88e0f9a9cb5b1d49aba61f80ae97f5 (diff)
downloadsrc-74e2b24f2c369ffdff2f54fa9f96427cc45ef3a6.tar.gz
src-74e2b24f2c369ffdff2f54fa9f96427cc45ef3a6.zip
As of r364746 (OpenZFS import) existing ZPOOLs are not imported
prior to zvol and mountcritlocal resulting in ZVOLs (swap and virtual machine UFS filesystems) being unavailable, leading to boot failures. We move the zpool import from zfs to a new zpool script, with the -N option to avoid mounting datasets while making the ZPOOL's datasets available for "legacy" mount (mountpoint=legacy) and ZVOLs available for subsequent use for swap (in the zvol rc sript) or for UFS or other filesystems in fstab(5), mounted by mountcritlocal. Reviewed by: freqlabs (previous version) Differential Revision: https://reviews.freebsd.org/D26185
Notes
Notes: svn path=/head/; revision=364817
-rw-r--r--libexec/rc/rc.d/Makefile1
-rwxr-xr-xlibexec/rc/rc.d/mountcritlocal2
-rwxr-xr-xlibexec/rc/rc.d/zfs7
-rwxr-xr-xlibexec/rc/rc.d/zpool31
-rwxr-xr-xlibexec/rc/rc.d/zvol2
5 files changed, 34 insertions, 9 deletions
diff --git a/libexec/rc/rc.d/Makefile b/libexec/rc/rc.d/Makefile
index 77499e483f0d..7e0e63dae414 100644
--- a/libexec/rc/rc.d/Makefile
+++ b/libexec/rc/rc.d/Makefile
@@ -318,6 +318,7 @@ CONFGROUPS+= ZFS
ZFS+= zfs
ZFS+= zfsbe
ZFS+= zfsd
+ZFS+= zpool
ZFS+= zvol
.endif
diff --git a/libexec/rc/rc.d/mountcritlocal b/libexec/rc/rc.d/mountcritlocal
index f52c565d65c6..cfdc8041a8c7 100755
--- a/libexec/rc/rc.d/mountcritlocal
+++ b/libexec/rc/rc.d/mountcritlocal
@@ -4,7 +4,7 @@
#
# PROVIDE: mountcritlocal
-# REQUIRE: root hostid_save mdconfig
+# REQUIRE: root hostid_save mdconfig zvol
# KEYWORD: nojail shutdown
. /etc/rc.subr
diff --git a/libexec/rc/rc.d/zfs b/libexec/rc/rc.d/zfs
index 69e3ad5ce671..2d35f9b54642 100755
--- a/libexec/rc/rc.d/zfs
+++ b/libexec/rc/rc.d/zfs
@@ -25,13 +25,6 @@ zfs_start_jail()
zfs_start_main()
{
- local cachefile
-
- for cachefile in /boot/zfs/zpool.cache /etc/zfs/zpool.cache; do
- if [ -r $cachefile ]; then
- zpool import -c $cachefile -a
- fi
- done
zfs mount -va
zfs share -a
if [ ! -r /etc/zfs/exports ]; then
diff --git a/libexec/rc/rc.d/zpool b/libexec/rc/rc.d/zpool
new file mode 100755
index 000000000000..01028f8633ea
--- /dev/null
+++ b/libexec/rc/rc.d/zpool
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: zpool
+# REQUIRE: hostid
+# BEFORE: zvol mountcritlocal
+# KEYWORD: nojail
+
+. /etc/rc.subr
+
+name="zpool"
+desc="Import ZPOOLs"
+rcvar="zfs_enable"
+start_cmd="zpool_start"
+required_modules="zfs"
+
+zpool_start()
+{
+ local cachefile
+
+ for cachefile in /boot/zfs/zpool.cache /etc/zfs/zpool.cache; do
+ if [ -r $cachefile ]; then
+ zpool import -c $cachefile -a -N
+ fi
+ done
+}
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/libexec/rc/rc.d/zvol b/libexec/rc/rc.d/zvol
index 06530347946a..e8cfc203b481 100755
--- a/libexec/rc/rc.d/zvol
+++ b/libexec/rc/rc.d/zvol
@@ -4,7 +4,7 @@
#
# PROVIDE: zvol
-# REQUIRE: hostid
+# REQUIRE: zpool
# BEFORE: dumpon
# KEYWORD: nojail