#! /bin/sh
# aoe-flush - ask aoe driver to forget about devices
# Copyright 2009, CORAID, Inc., and licensed under GPL v.2.

zero="`basename $0`"
f="@devdir@/flush"
spec=""

if ! test -w "$f"; then
	echo 1>&2 "$zero: $f does not exist or is not writeable."
	exit 1
fi
if ! test -c $f; then
	exec 1>&2
	echo "$zero: $f is not a character device file"
	echo "$zero: use udev or aoe-mkdevs to create it"
	exit 1
fi

# make sure that each device in the whitespace-separated
# list exists
verify_devs () {
	err=""
	for d; do
		aoe-stat |
			awk -vd="$d" '$1==d{print $1}' |
			test "`cat`" || {
			exec 2>&1
			echo "$zero Error: \"$d\" is not an aoe device"
			err="$err $d"
		}
	done
	test ! "$err"
}

err=""
if test "$1"; then
	if test "$1" = "-a"; then
		spec=all
	else
		spec="$*"
		verify_devs $spec || exit 1
	fi
	for i in $spec; do
		printf "$i" > "$f" || {
			echo 1>&2 "$zero: flush failed"
			err="$err $i"
		}
	done
else
	echo > "$f" || err=no_args
fi
if test "$err"; then
	exit 1
fi
