#! /bin/bash
# FS QA Test No. 216
#
# See what happens if we CoW blocks 2-4 of a page's worth of blocks when the
# second block is a unwritten block.
#
# This test is dependent on the system page size, so we cannot use md5 in
# the golden output; we can only compare to a check file.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015, Oracle and/or its affiliates.  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 "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
    cd /
    rm -rf $tmp.* $testdir
}

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

# real QA test starts here
_supported_os Linux
_require_scratch_reflink
_require_xfs_io_command "falloc"

rm -f $seqres.full

pagesz=$(getconf PAGE_SIZE)
blksz=$((pagesz / 4))

echo "Format and mount"
_scratch_mkfs_blocksized $blksz > $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1

testdir=$SCRATCH_MNT/test-$seq
mkdir $testdir

real_blksz=$(_get_file_block_size $testdir)
test $real_blksz != $blksz && _notrun "Failed to format with small blocksize."

echo "Create the original files"
_pwrite_byte 0x61 0 $pagesz $testdir/file1 >> $seqres.full

$XFS_IO_PROG -f -c "truncate $pagesz" $testdir/file2 >> $seqres.full
$XFS_IO_PROG -f -c "truncate $pagesz" $testdir/file2.chk >> $seqres.full

$XFS_IO_PROG -f -c "falloc -k $blksz $blksz" $testdir/file2 >> $seqres.full
_pwrite_byte 0x00 $blksz $blksz $testdir/file2.chk >> $seqres.full

$XFS_IO_PROG -f -c "falloc -k $((blksz * 3)) $blksz" $testdir/file2 >> $seqres.full
_pwrite_byte 0x00 $((blksz * 3)) $blksz $testdir/file2.chk >> $seqres.full

_reflink_range $testdir/file1 $blksz $testdir/file2 $((blksz * 2)) $blksz >> $seqres.full
_pwrite_byte 0x61 $((blksz * 2)) $blksz $testdir/file2.chk >> $seqres.full
_scratch_cycle_mount

echo "Compare files"
! cmp -s $testdir/file1 $testdir/file2 || _fail "file1 and file2 don't match."
cmp -s $testdir/file2 $testdir/file2.chk || _fail "file2 and file2.chk don't match."

echo "CoW and unmount"
$XFS_IO_PROG -f -c "pwrite -S 0x63 $((blksz + 17)) $((blksz * 3 - 34))" $testdir/file2 >> $seqres.full
$XFS_IO_PROG -f -c "pwrite -S 0x63 $((blksz + 17)) $((blksz * 3 - 34))" $testdir/file2.chk >> $seqres.full
_scratch_cycle_mount

echo "Compare files"
! cmp -s $testdir/file1 $testdir/file2 || _fail "file1 and file2 don't match."
cmp -s $testdir/file2 $testdir/file2.chk || _fail "file2 and file2.chk don't match."

# success, all done
status=0
exit
