#! /bin/bash
# FS QA Test No. 213
#
# Ensure that quota charges us for reflnking a file and that we're not
# charged for buffered copy on write.  Same test as g/305, but we get to
# play with cowextsz.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016, 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.*
}

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

# real QA test starts here
_supported_os Linux
_supported_fs xfs
_require_scratch_reflink
_require_cp_reflink
_require_fiemap
_require_quota
_require_nobody
_require_xfs_io_command "cowextsize"
_require_user

rm -f $seqres.full

echo "Format and mount"
_scratch_mkfs > $seqres.full 2>&1
export MOUNT_OPTIONS="-o usrquota,grpquota $MOUNT_OPTIONS"
_scratch_mount >> $seqres.full 2>&1
quotacheck -u -g $SCRATCH_MNT 2> /dev/null
quotaon $SCRATCH_MNT 2> /dev/null

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

sz=1048576
blksz=65536
echo "Create the original files"
$XFS_IO_PROG -c "cowextsize $((sz/2))" $testdir >> $seqres.full
$XFS_IO_PROG -f -c "pwrite -S 0x61 -b $sz 0 $sz" $testdir/file1 >> $seqres.full
_cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full
_cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
touch $testdir/urk
chown nobody $testdir/urk
touch $testdir/erk
chown $qa_user $testdir/erk
_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount

echo "Change file ownership"
chown $qa_user $testdir/file1
chown $qa_user $testdir/file2
chown $qa_user $testdir/file3
_report_quota_blocks $SCRATCH_MNT

echo "CoW one of the files"
$XFS_IO_PROG -f -c "pwrite -S 0x63 -b $blksz $((sz - blksz)) $blksz" -c "fsync" $testdir/file2 >> $seqres.full
_report_quota_blocks $SCRATCH_MNT

echo "Remount the FS to see if accounting changes"
_scratch_cycle_mount
_report_quota_blocks $SCRATCH_MNT

echo "Chown one of the files"
chown nobody $testdir/file3
_report_quota_blocks $SCRATCH_MNT

# success, all done
status=0
exit
