#!/bin/sh
#
# blockdev		This shell script takes care of starting and stopping blockdev.
#
# chkconfig:	2345 01 99
# description:	blockdev
#
# processname:	blockdev

[ -f /etc/sysconfig/blockdev ] || exit 0

blockdevs=$(awk -F= '!/^#/ && !/^$/ {if ($2) print $1}' /etc/sysconfig/blockdev)
if [ -z "$blockdevs" ]; then
	case "$1" in
	start|stop|restart|force-reload)
		exit 0
		;;
	esac
fi

# Source function library.
. /etc/rc.d/init.d/functions

# Source blockdev configuration.
. /etc/sysconfig/blockdev

start() {
	if [ -f /var/lock/subsys/blockdev ]; then
		msg_already_running blockdev
		return
	fi

	local var realdrive drive PARAMS
	for var in $blockdevs; do
		realdrive=
		drive=${var#BLOCKDEV_}
		if [ -d "/sys/block/${drive}" -a -e "/dev/${drive}" ]; then
			realdrive="/dev/${drive}"
		elif [ -e "/dev/mapper/${drive}" ]; then
			realdrive="/dev/mapper/${drive}"
		elif drive=$(echo $drive | tr _ -) && [ -d "/sys/block/${drive}" -a -e "/dev/${drive}" ]; then
			realdrive="/dev/${drive}"
		elif [ -e "/dev/mapper/${drive}" ]; then
			realdrive="/dev/mapper/${drive}"
		fi

		if [ -n "$realdrive" ]; then
			eval PARAMS=\$$var
			if [ -n "${PARAMS}" ]; then
				show "Setting parameters for block drive %s (%s)" "$drive" "$PARAMS"
				busy
				/sbin/blockdev ${PARAMS} $realdrive
				ok
			fi
		fi
	done
	# TODO: retval not really handled here
	RETVAL=$?
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/blockdev
}

stop() {
	# Stop daemons.
	if [ ! -f /var/lock/subsys/blockdev ]; then
		msg_not_running blockdev
		return
	fi
	rm -f /var/lock/subsys/blockdev
}

status() {
	if [ -z "$blockdevs" ]; then
		echo "no devices configured for blockdev"
		RETVAL=1
		return
	fi

	echo "blockdev configured for:"
	local var drive realdrive PARAMS
	for var in $blockdevs; do
		drive=${var#BLOCKDEV_}
		echo -n "- $drive: "

		realdrive=
		if [ -d "/sys/block/${drive}" -a -e "/dev/${drive}" ]; then
			realdrive="/dev/${drive}"
		elif [ -e "/dev/mapper/${drive}" ]; then
			realdrive="/dev/mapper/${drive}"
		elif drive=$(echo $drive | tr _ -) && [ -d "/sys/block/${drive}" -a -e "/dev/${drive}" ]; then
			realdrive="/dev/${drive}"
		elif [ -e "/dev/mapper/${drive}" ]; then
			realdrive="/dev/mapper/${drive}"
		fi

		eval PARAMS=\$$var
		if [ -n "$realdrive" ]; then
			echo "${PARAMS}; device=$realdrive"
		else
			echo "${PARAMS}; device not present"
		fi
	done
}

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|force-reload)
	stop
	start
	;;
  status)
	status
	;;
  *)
	msg_usage "$0 {start|stop|restart|force-reload|status}"
	exit 3
esac

exit $RETVAL
