Files
apfstests/tests/generic/328
T
Darrick J. Wong eaa652fbb2 reflink: fix quota tests to work properly
Fix the reflink quota tests to su to the fsgqa user so that we actually
test enforcement of quotas.  Seems that XFS enforces user quotas even
if root is writing to a user file, whereas everything else lets root
writes through.  Also clean up some of the variable usage and
_require_user.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
2017-01-15 13:56:45 +08:00

107 lines
3.0 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test No. 328
#
# Ensure that we can't go over the hard block limit when CoWing a file.
#
#-----------------------------------------------------------------------
# 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
_require_scratch_reflink
_require_cp_reflink
_require_fiemap
_require_quota
_require_nobody
_require_odirect
_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
echo "Create the original files"
$XFS_IO_PROG -f -c "pwrite -S 0x61 -b $sz 0 $sz" $testdir/file1 >> $seqres.full
chown $qa_user $testdir/file1
_cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full
_cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
quotaon $SCRATCH_MNT 2> /dev/null
echo "Set hard quota to prevent rewrite"
setquota -u $qa_user 0 1024 0 0 $SCRATCH_MNT
_report_quota_blocks $SCRATCH_MNT
echo "Try to dio write the whole file"
su $qa_user -c '$XFS_IO_PROG -d -c "pwrite 0 '$((sz+65536))'" '$testdir'/file1' 2>&1 >> $seqres.full | \
_filter_xfs_io_error
_report_quota_blocks $SCRATCH_MNT
echo "Try to write the whole file"
su $qa_user -c '$XFS_IO_PROG -c "pwrite 0 '$((sz+65536))'" '$testdir'/file1' 2>&1 >> $seqres.full | \
_filter_xfs_io_error
_report_quota_blocks $SCRATCH_MNT
echo "Set hard quota to allow rewrite"
setquota -u $qa_user 0 8192 0 0 $SCRATCH_MNT
_report_quota_blocks $SCRATCH_MNT
echo "Try to dio write the whole file"
_pwrite_byte 0x62 0 $sz $testdir/file1 -d >> $seqres.full
sync
_report_quota_blocks $SCRATCH_MNT
echo "Try to write the whole file"
_pwrite_byte 0x62 0 $sz $testdir/file3 >> $seqres.full
sync
_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
exit