diff options
author | pjd <pjd@FreeBSD.org> | 2007-05-24 07:43:00 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2007-05-24 07:43:00 +0000 |
commit | a65efa1fb1d0d2d5c74b9efe0d92371bafbdf2a7 (patch) | |
tree | 9916ba98aeb989faeea03e44ca96096636575fb5 /sys/contrib/opensolaris/uts | |
parent | dd88bd663d93b2cc4f8a0c90dbb8d07cd9d44b6f (diff) | |
download | FreeBSD-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/opensolaris/uts')
-rw-r--r-- | sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c | 5 |
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); |