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

[ -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
		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
		RETVAL=$?
		[ $RETVAL -eq 0 ] && touch /var/lock/subsys/blockdev
	else
		msg_already_running blockdev
	fi
}

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

RETVAL=0
# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|force-reload)
	stop
	start
	;;
  status)
  	if [ "$blockdevs" ]; then
		echo "blockdev configured for:"
		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
	else
		echo "no devices configured for blockdev"
	fi
	;;
  *)
	msg_usage "$0 {start|stop|restart|force-reload|status}"
	exit 3
esac

exit $RETVAL
