#! /bin/bash
# FS QA Test No. 290
#
# Makes calls to XFS_IOC_ZERO_RANGE and checks tossed ranges
#
# Nothing should be tossed unless the range includes a page boundry
#
# Primarily tests page boundries and boundries that are
#  off-by-one to ensure we're only tossing what's expected
#
#-----------------------------------------------------------------------
# Copyright (c) 2012 SGI.  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
#-----------------------------------------------------------------------
#
# creator
owner=adahl@sgi.com

seq=`basename $0`
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

# real QA test starts here

# Modify as appropriate.
_supported_fs xfs
_supported_os Linux

_require_xfs_io_zero

testfile=$TEST_DIR/290.$$

test_zero()
{
	zero_start=$1
	zero_len=$2

	$XFS_IO_PROG -f -t -c "pwrite -S 0x41 0 4096" \
                      -c "pwrite -S 0x42 4096 4096" \
                      -c "zero $zero_start $zero_len" \
                      -c "pread -v 0 8192" \
                      $testfile | _filter_xfs_io_unique
}

# [0,1] -- Shouldn't toss anything
test_zero    0    1

#[0,4095] -- Shouldn't toss anything
test_zero    0 4095

#[0,4096] -- Should toss first page
test_zero    0 4096

#[0,4097] -- Should toss first page
test_zero    0 4097

#[4095,8191] -- Should toss last byte of first page
test_zero 4095 4096

#[4095,8192] -- Should toss second page & last byte of first page
test_zero 4095 4097

#[4095,8193] -- Should toss second page & last byte of first page
test_zero 4095 4098

#[4096,8192] -- Should toss second page
test_zero 4096 4096

#[1024,5120] -- Should toss from 1024 to end of first page
test_zero 1024 4096

# success, all done
status=0
exit
