summaryrefslogtreecommitdiffstats
path: root/sys/contrib
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2007-05-24 07:43:00 +0000
committerpjd <pjd@FreeBSD.org>2007-05-24 07:43:00 +0000
commita65efa1fb1d0d2d5c74b9efe0d92371bafbdf2a7 (patch)
tree9916ba98aeb989faeea03e44ca96096636575fb5 /sys/contrib
parentdd88bd663d93b2cc4f8a0c90dbb8d07cd9d44b6f (diff)
downloadFreeBSD-src-a65efa1fb1d0d2d5c74b9efe0d92371bafbdf2a7.zip
FreeBSD-src-a65efa1fb1d0d2d5c74b9efe0d92371bafbdf2a7.tar.gz
Initialize ZFS a bit earlier and block root mounting until
initialization is complete. This fixes some root-on-ZFS configurations. Reported by: Bruno Damour <freebsd.ruomad@free.fr> Tested by: Bruno Damour <freebsd.ruomad@free.fr>
Diffstat (limited to 'sys/contrib')
-rw-r--r--sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c b/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
index 24b5226..c9424be 100644
--- a/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
+++ b/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
@@ -1773,6 +1773,7 @@ zfsdev_fini(void)
}
static struct task zfs_start_task;
+static struct root_hold_token *zfs_root_token;
static void
zfs_start(void *context __unused, int pending __unused)
@@ -1783,6 +1784,7 @@ zfs_start(void *context __unused, int pending __unused)
zfs_init();
zvol_init();
printf("ZFS storage pool version " ZFS_VERSION_STRING "\n");
+ root_mount_rel(zfs_root_token);
}
static int
@@ -1793,6 +1795,7 @@ zfs_modevent(module_t mod, int type, void *unused __unused)
error = EOPNOTSUPP;
switch (type) {
case MOD_LOAD:
+ zfs_root_token = root_mount_hold("ZFS");
printf("WARNING: ZFS is considered to be an experimental "
"feature in FreeBSD.\n");
TASK_INIT(&zfs_start_task, 0, zfs_start, NULL);
@@ -1820,4 +1823,4 @@ static moduledata_t zfs_mod = {
zfs_modevent,
0
};
-DECLARE_MODULE(zfsctrl, zfs_mod, SI_SUB_MOUNT_ROOT, SI_ORDER_ANY);
+DECLARE_MODULE(zfsctrl, zfs_mod, SI_SUB_VFS, SI_ORDER_ANY);
OpenPOWER on IntegriCloud