test_description="test prezeroed storage metadata allocation"
FILE_SIZE=16M

LOG=$test_name.log
OUT=$test_name.out
EXP=$test_dir/expect

if test "$(id -u)" -ne 0 ; then
    echo "$test_name: $test_description: skipped (not root)"
elif ! command -v losetup >/dev/null ; then
    echo "$test_name: $test_description: skipped (no losetup)"
else
    dd if=/dev/zero of=$TMPFILE.1 bs=1 count=0 seek=$FILE_SIZE >> $LOG 2>&1
    dd if=/dev/zero of=$TMPFILE.2 bs=1 count=0 seek=$FILE_SIZE >> $LOG 2>&1

    LOOP1=$(losetup --show --sector-size 4096 -f $TMPFILE.1)
    if [ ! -b "$LOOP1" ]; then
        echo "$test_name: $DESCRIPTION: skipped (no loop devices)"
        rm -f $TMPFILE.1 $TMPFILE.2
        exit 0
    fi
    LOOP2=$(losetup --show --sector-size 4096 -f $TMPFILE.2)
    if [ ! -b "$LOOP2" ]; then
        echo "$test_name: $DESCRIPTION: skipped (no loop devices)"
        rm -f $TMPFILE.1 $TMPFILE.2
	losetup -d $LOOP1
        exit 0
    fi

    echo $MKE2FS -o Linux -t ext4 $LOOP1 >> $LOG 2>&1
    $MKE2FS -o Linux -t ext4 $LOOP1 >> $LOG 2>&1
    sync
    stat $TMPFILE.1 >> $LOG 2>&1
    SZ=$(stat -c "%b" $TMPFILE.1)
    if test $SZ -gt 10000 ; then
	echo "> 10000" > $OUT
    else
	echo "$SZ" > $OUT
    fi

    echo $MKE2FS -o Linux -t ext4 -E assume_storage_prezeroed=1 $LOOP2 >> $LOG 2>&1
    $MKE2FS -o Linux -t ext4 -E assume_storage_prezeroed=1 $LOOP2 >> $LOG 2>&1
    sync
    stat $TMPFILE.2 >> $LOG 2>&1
    stat -c "%b" $TMPFILE.2 >> $OUT

    losetup -d $LOOP1
    losetup -d $LOOP2
    rm -f $TMPFILE.1 $TMPFILE.2

    cmp -s $OUT $EXP
    status=$?

    if [ "$status" = 0 ] ; then
	echo "$test_name: $test_description: ok"
	touch $test_name.ok
    else
	echo "$test_name: $test_description: failed"
	cat $LOG > $test_name.failed
	diff $EXP $OUT >> $test_name.failed
    fi
fi
unset LOG OUT EXP FILE_SIZE LOOP1 LOOP2
