zfs revision 180563
1132718Skan#!/bin/sh
2169689Skan#
3132718Skan# $FreeBSD: head/etc/rc.d/zfs 180563 2008-07-16 19:22:48Z dougb $
4132718Skan#
5132718Skan
6132718Skan# PROVIDE: zfs
7132718Skan# REQUIRE: mountcritlocal
8132718Skan
9132718Skan. /etc/rc.subr
10132718Skan
11132718Skanname="zfs"
12132718Skanrcvar="zfs_enable"
13132718Skanstart_cmd="zfs_start"
14132718Skanstop_cmd="zfs_stop"
15132718Skanrequired_modules="zfs"
16132718Skan
17132718Skanzfs_start_jail()
18132718Skan{
19169689Skan	if [ `$SYSCTL_N security.jail.mount_allowed` -eq 1 ]; then
20169689Skan		zfs mount -a
21132718Skan	fi
22132718Skan}
23132718Skan
24132718Skanzfs_start_main()
25132718Skan{
26132718Skan	zfs volinit
27132718Skan	zfs mount -a
28132718Skan	zfs share -a
29132718Skan	if [ ! -r /etc/zfs/exports ]; then
30132718Skan		touch /etc/zfs/exports
31132718Skan	fi
32132718Skan	# Enable swap on ZVOLs with property org.freebsd:swap=on.
33132718Skan	zfs list -H -o org.freebsd:swap,name -t volume | \
34132718Skan	while read state name; do
35132718Skan		case "${state}" in
36132718Skan		[oO][nN])
37132718Skan			swapon /dev/zvol/${name}
38132718Skan			;;
39132718Skan		esac
40132718Skan	done
41132718Skan}
42132718Skan
43132718Skanzfs_start()
44132718Skan{
45132718Skan	if [ `$SYSCTL_N security.jail.jailed` -eq 1 ]; then
46132718Skan		zfs_start_jail
47132718Skan	else
48132718Skan		zfs_start_main
49132718Skan	fi
50132718Skan}
51132718Skan
52169689Skanzfs_stop_jail()
53169689Skan{
54169689Skan	if [ `$SYSCTL_N security.jail.mount_allowed` -eq 1 ]; then
55169689Skan		zfs unmount -a
56169689Skan	fi
57169689Skan}
58169689Skan
59132718Skanzfs_stop_main()
60132718Skan{
61132718Skan	# Disable swap on ZVOLs with property org.freebsd:swap=on.
62132718Skan	zfs list -H -o org.freebsd:swap,name -t volume | \
63132718Skan	while read state name; do
64132718Skan		case "${state}" in
65132718Skan		[oO][nN])
66132718Skan			swapoff /dev/zvol/${name}
67132718Skan			;;
68132718Skan		esac
69132718Skan	done
70132718Skan	zfs unshare -a
71132718Skan	zfs unmount -a
72169689Skan	zfs volfini
73169689Skan}
74132718Skan
75132718Skanzfs_stop()
76132718Skan{
77132718Skan	if [ `$SYSCTL_N security.jail.jailed` -eq 1 ]; then
78132718Skan		zfs_stop_jail
79132718Skan	else
80132718Skan		zfs_stop_main
81132718Skan	fi
82132718Skan}
83132718Skan
84132718Skanload_rc_config $name
85132718Skanrun_rc_command "$1"
86132718Skan