#!@SHELL@
#
# zfs-zed
#
# chkconfig:    2345 29 99
# description:  This script will start and stop the ZFS Event Daemon.
# probe: true
#
### BEGIN INIT INFO
# Provides:          zfs-zed
# Required-Start:    zfs-mount
# Required-Stop:     zfs-mount
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Stop-After:      zfs-share
# Short-Description: ZFS Event Daemon
# Description:       zed monitors ZFS events. When a zevent is posted, zed
#                    will run any scripts that have been enabled for the
#                    corresponding zevent class.
### END INIT INFO
#
# Released under the 2-clause BSD license.
#
# The original script that acted as a template for this script came from
# the Debian GNU/Linux kFreeBSD ZFS packages (which did not include a
# licensing stansa) in the commit dated Mar 24, 2011:
#   https://github.com/zfsonlinux/pkg-zfs/commit/80a3ae582b59c0250d7912ba794dca9e669e605a

# Source the common init script
. @sysconfdir@/zfs/zfs-functions

ZED_NAME="zed"
ZED_PIDFILE="@runstatedir@/$ZED_NAME.pid"

extra_started_commands="reload"

# Exit if the package is not installed
[ -x "$ZED" ] || exit 0

# ----------------------------------------------------

do_depend()
{
	after zfs-mount localmount
}

do_start()
{
	check_module_loaded "zfs" || exit 0

	ZED_ARGS="$ZED_ARGS -p $ZED_PIDFILE"

	zfs_action "Starting ZFS Event Daemon" zfs_daemon_start \
	    "$ZED_PIDFILE" "$ZED" "$ZED_ARGS"
	return "$?"
}

do_stop()
{
	local pools RET
	check_module_loaded "zfs" || exit 0

	zfs_action "Stopping ZFS Event Daemon" zfs_daemon_stop \
	   "$ZED_PIDFILE" "$ZED" "$ZED_NAME"
	if [ "$?" -eq "0" ]
	then
		# Let's see if we have any pools imported
		pools=$("$ZPOOL" list -H -oname)
		if [ -z "$pools" ]
		then
			# No pools imported, it is/should be safe/possible to
			# unload modules.
			zfs_action "Unloading modules" rmmod zfs zunicode \
			    zavl zcommon znvpair zlua spl
			return "$?"
		fi
	else
		return "$?"
	fi
}

do_status()
{
	check_module_loaded "zfs" || exit 0

	zfs_daemon_status "$ZED_PIDFILE" "$ZED" "$ZED_NAME"
	return "$?"
}

do_reload()
{
	check_module_loaded "zfs" || exit 0

	zfs_action "Reloading ZFS Event Daemon" zfs_daemon_reload \
	    "$ZED_PIDFILE" "$ZED_NAME"
	return "$?"
}

# ----------------------------------------------------

if [ ! -e /sbin/openrc-run ]; then
	case "$1" in
		start)
			do_start
			;;
		stop)
			do_stop
			;;
		status)
			do_status
			;;
		reload|force-reload)
			do_reload
			;;
		restart)
			do_stop
			do_start
			;;
		*)
			[ -n "$1" ] && echo "Error: Unknown command $1."
			echo "Usage: $0 {start|stop|status|reload|restart}"
			exit 1
			;;
	esac

	exit $?
else
	# Create wrapper functions since Gentoo don't use the case part.
	depend() { do_depend; }
	start() { do_start; }
	stop() { do_stop; }
	status() { do_status; }
	reload() { do_reload; }
fi
