#! /bin/bash
# FSQA Test No. 185
#
# Dmapi Punch/Probe Alignment compared to xfsctl(FREESPACE); 
#
#-----------------------------------------------------------------------
# Copyright (c) 2007 Silicon Graphics, Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#-----------------------------------------------------------------------
#

seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=1    # failure is the default!
trap "exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/dmapi

# real QA test starts here
_supported_fs xfs
_supported_os Linux

_require_scratch
_scratch_mkfs_xfs -b size=512 >/dev/null 2>&1
_dmapi_scratch_mount

cat > $tmp.dmapi-param <<EOF
# length	offset
  16k		0    # page aligned
  1k		0    # not page aligned
# random tests
  1k            4k
  4k            1k
  1024k         512k
EOF

mkdir -p $SCRATCH_MNT/dmapi
f=$SCRATCH_MNT/dmapi/holly_file
e=${DMAPI_QASUITE1_DIR}cmd/probe_punch_xfsctl_hole

cat $tmp.dmapi-param | sed s/'\#.*'//g| grep . |while read l o; do
    echo "======================================================="
	echo "Testing with length = $l, offset = $o"

	echo "Method:	xfsctl"
	dd if=/dev/zero bs=1024k count=3 of=$f >/dev/null 2>&1
	$e -x -l$l -o$o $f | _filter_scratch

	echo "Method:	dmapi_probe"
	dd if=/dev/zero bs=1024k count=3 of=$f >/dev/null 2>&1
	$e -l$l -o$o $f | _filter_scratch

	echo "Method:	dmapi_punch"
	$e -p -l$l -o$o $f | _filter_scratch
	echo "======================================================="
done

rm -rf $tmp.dmapi-param

status=0
exit 
