#
# Configuration file for overlayfs
#

DEFAULT_MKFS_OPTIONS=""

function __fsck()
{
	local dev="$1"

	case "$BASE_FSTYPE" in
	    ext4)
		/sbin/e2fsck -fy "$dev"
		;;
	    xfs)
		xfs_repair "$dev"
		;;
	esac
}

function __check_filesystem()
{
	local tst_dev="$1"
	local tst_mnt="$2"
	local scr_dev="$3"
	local scr_mnt="$4"

	umount $tst_dev >& /dev/null
	__fsck "$tst_dev"
	ret="$?"
	mount -t $BASE_FSTYPE $tst_dev $tst_mnt
	echo fsck for "$BASE_FSTYPE" on test device exited with status "$ret"

	umount $scr_dev >& /dev/null
	__fsck "$scr_dev"
	ret2="$?"
	mount -t $BASE_FSTYPE $scr_dev $scr_mnt
	echo fsck for "$BASE_FSTYPE" on scratch device exited with status "$ret"

	if test "$ret" -eq 0 ; then
		ret=$ret2
	fi
	return "$ret"
}

function check_filesystem()
{
	echo check_filesystem\(\) should be overriden by a test cfg file.
	return -1
}

function __mkfs()
{
	local dev="$1"

	case "$BASE_FSTYPE" in
	    ext4)
		/sbin/mke2fs -F -q -t ext4 -O verity "$dev"
		;;
	    xfs)
		mkfs.xfs -f -m rmapbt=1,reflink=1 "$dev"
		;;
	esac
}

function __format_filesystem()
{
	local tst_dev="$1"
	local tst_mnt="$2"
	local scr_dev="$3"
	local scr_mnt="$4"

	umount $tst_dev >& /dev/null
	__mkfs $tst_dev
	mount -t $BASE_FSTYPE $tst_dev $tst_mnt
	mkdir -p $tst_mnt/ovl $tst_mnt/testarea

	umount $scr_dev >& /dev/null
	__mkfs $scr_dev
	mount -t $BASE_FSTYPE $scr_dev $scr_mnt
	mkdir -p $scr_mnt/ovl $scr_mnt/testarea

	return 0
}

function format_filesystem()
{
	echo format_filesystem\(\) should be overriden by a test cfg file.
	return -1
}

function setup_mount_opts()
{
    if test -n "$MNTOPTS" ; then
	if test -n "$OVERLAY_MOUNT_OPTIONS" ; then
            export OVERLAY_MOUNT_OPTIONS="$OVERLAY_MOUNT_OPTIONS,$MNTOPTS"
	else
	    export OVERLAY_MOUNT_OPTIONS="-o $MNTOPTS"
	fi
    fi
    export OVERLAY=true
    export OVL_BASE_FSTYP=$BASE_FSTYPE
}

function get_mkfs_opts()
{
    :
}


function show_mkfs_opts()
{
    :
}

function show_mount_opts()
{
    echo OVERLAY_MOUNT_OPTIONS: "$OVERLAY_MOUNT_OPTIONS"
    echo BASE_FSTYPE: "$BASE_FSTYPE"
}

function test_name_alias()
{
    case "$1" in
	default)	echo "small" ;;
	*)		echo "$1" ;;
    esac
}

function reset_vars()
{
    unset TMPFS_MOUNT_OPTIONS
    unset OVERLAY
    unset OVL_BASE_FSTYP
    unset OVL_BASE_SCRATCH_DEV
    unset OVL_BASE_SCRATCH_MNT
    unset OVL_BASE_TEST_DEV
    unset OVL_BASE_TEST_DIR
}
