aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2017-01-09 12:53:35 -0800
committerEryu Guan <eguan@redhat.com>2017-01-15 13:56:45 +0800
commiteaa652fbb2934658452bf7a677c6082726513071 (patch)
tree8e3677deb82b11f49b167e1d3385d2bc8f5492fa
parent3547db8e8440568d974b00495ab2e15dcce4faec (diff)
downloadxfstests-dev-eaa652fbb2934658452bf7a677c6082726513071.tar.gz
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>
-rw-r--r--common/quota10
-rwxr-xr-xtests/generic/30522
-rw-r--r--tests/generic/305.out30
-rwxr-xr-xtests/generic/32622
-rw-r--r--tests/generic/326.out30
-rwxr-xr-xtests/generic/32719
-rw-r--r--tests/generic/327.out12
-rwxr-xr-xtests/generic/32829
-rw-r--r--tests/generic/328.out28
-rwxr-xr-xtests/xfs/21322
-rw-r--r--tests/xfs/213.out30
-rwxr-xr-xtests/xfs/21422
-rw-r--r--tests/xfs/214.out30
13 files changed, 153 insertions, 153 deletions
diff --git a/common/quota b/common/quota
index d4ae861ddd..c48cc70b8d 100644
--- a/common/quota
+++ b/common/quota
@@ -302,5 +302,15 @@ _check_quota_usage()
}
}
+# Report the block usage of root, $qa_user, and nobody
+_report_quota_blocks() {
+ repquota $1 | egrep "^($qa_user|root|nobody)" | awk '{print $1, $3, $4, $5}'
+}
+
+# Report the inode usage of root, $qa_user, and nobody
+_report_quota_inodes() {
+ repquota $1 | egrep "^($qa_user|root|nobody)" | awk '{print $1, $6, $7, $8}'
+}
+
# make sure this script returns success
/bin/true
diff --git a/tests/generic/305 b/tests/generic/305
index d73d87f482..ceef333cea 100755
--- a/tests/generic/305
+++ b/tests/generic/305
@@ -49,10 +49,8 @@ _require_cp_reflink
_require_fiemap
_require_quota
_require_nobody
+_require_user
-_repquota() {
- repquota $SCRATCH_MNT | egrep '^(fsgqa|root|nobody)'
-}
rm -f $seqres.full
echo "Format and mount"
@@ -73,27 +71,27 @@ _cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
touch $testdir/urk
chown nobody $testdir/urk
touch $testdir/erk
-chown fsgqa $testdir/erk
-_repquota
+chown $qa_user $testdir/erk
+_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
echo "Change file ownership"
-chown fsgqa $testdir/file1
-chown fsgqa $testdir/file2
-chown fsgqa $testdir/file3
-_repquota
+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 $((sz/2)) 0 $((sz/2))" -c "fsync" $testdir/file2 >> $seqres.full
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Remount the FS to see if accounting changes"
_scratch_cycle_mount
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Chown one of the files"
chown nobody $testdir/file3
-_repquota
+_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
diff --git a/tests/generic/305.out b/tests/generic/305.out
index 0bfd620b33..fbd4e24193 100644
--- a/tests/generic/305.out
+++ b/tests/generic/305.out
@@ -1,22 +1,22 @@
QA output created by 305
Format and mount
Create the original files
-root -- 3072 0 0 7 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 0 0 0 1 0 0
+root 3072 0 0
+nobody 0 0 0
+fsgqa 0 0 0
Change file ownership
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
CoW one of the files
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
Remount the FS to see if accounting changes
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
Chown one of the files
-root -- 0 0 0 4 0 0
-nobody -- 1024 0 0 2 0 0
-fsgqa -- 2048 0 0 3 0 0
+root 0 0 0
+nobody 1024 0 0
+fsgqa 2048 0 0
diff --git a/tests/generic/326 b/tests/generic/326
index 8afc6a221e..3568efecf1 100755
--- a/tests/generic/326
+++ b/tests/generic/326
@@ -50,10 +50,8 @@ _require_fiemap
_require_quota
_require_nobody
_require_odirect
+_require_user
-_repquota() {
- repquota $SCRATCH_MNT | egrep '^(fsgqa|root|nobody)'
-}
rm -f $seqres.full
echo "Format and mount"
@@ -74,27 +72,27 @@ _cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
touch $testdir/urk
chown nobody $testdir/urk
touch $testdir/erk
-chown fsgqa $testdir/erk
-_repquota
+chown $qa_user $testdir/erk
+_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
echo "Change file ownership"
-chown fsgqa $testdir/file1
-chown fsgqa $testdir/file2
-chown fsgqa $testdir/file3
-_repquota
+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 -d -f -c "pwrite -S 0x63 -b $((sz/2)) 0 $((sz/2))" -c "fsync" $testdir/file2 >> $seqres.full
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Remount the FS to see if accounting changes"
_scratch_cycle_mount
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Chown one of the files"
chown nobody $testdir/file3
-_repquota
+_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
diff --git a/tests/generic/326.out b/tests/generic/326.out
index e771eb708a..de7f20b5ee 100644
--- a/tests/generic/326.out
+++ b/tests/generic/326.out
@@ -1,22 +1,22 @@
QA output created by 326
Format and mount
Create the original files
-root -- 3072 0 0 7 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 0 0 0 1 0 0
+root 3072 0 0
+nobody 0 0 0
+fsgqa 0 0 0
Change file ownership
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
CoW one of the files
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
Remount the FS to see if accounting changes
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
Chown one of the files
-root -- 0 0 0 4 0 0
-nobody -- 1024 0 0 2 0 0
-fsgqa -- 2048 0 0 3 0 0
+root 0 0 0
+nobody 1024 0 0
+fsgqa 2048 0 0
diff --git a/tests/generic/327 b/tests/generic/327
index c165ad5d2a..05cfb4afba 100755
--- a/tests/generic/327
+++ b/tests/generic/327
@@ -48,10 +48,8 @@ _require_cp_reflink
_require_fiemap
_require_quota
_require_nobody
+_require_user
-_repquota() {
- repquota $SCRATCH_MNT | egrep '^(fsgqa|root|nobody)'
-}
rm -f $seqres.full
echo "Format and mount"
@@ -67,20 +65,21 @@ 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 fsgqa $testdir/file1
+chown $qa_user $testdir/file1
_cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full
-_repquota
+_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
+quotaon $SCRATCH_MNT 2> /dev/null
echo "Set hard quota to prevent third reflink"
-setquota -u fsgqa 0 1024 0 0 $SCRATCH_MNT
-_repquota
+setquota -u $qa_user 0 1024 0 0 $SCRATCH_MNT
+_report_quota_blocks $SCRATCH_MNT
echo "Try to reflink again"
touch $testdir/file3
-chown fsgqa $testdir/file3
-_cp_reflink $testdir/file1 $testdir/file3 2>&1 | _filter_scratch
-_repquota
+chown $qa_user $testdir/file3
+su $qa_user -c "cp --reflink=always -f $testdir/file1 $testdir/file3" 2>&1 | _filter_scratch
+_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
diff --git a/tests/generic/327.out b/tests/generic/327.out
index 7160ff26ae..f4e145a1ab 100644
--- a/tests/generic/327.out
+++ b/tests/generic/327.out
@@ -1,12 +1,12 @@
QA output created by 327
Format and mount
Create the original files
-root -- 0 0 0 4 0 0
-fsgqa -- 2048 0 0 2 0 0
+root 0 0 0
+fsgqa 2048 0 0
Set hard quota to prevent third reflink
-root -- 0 0 0 4 0 0
-fsgqa +- 2048 0 1024 2 0 0
+root 0 0 0
+fsgqa 2048 0 1024
Try to reflink again
cp: failed to clone 'SCRATCH_MNT/test-327/file3' from 'SCRATCH_MNT/test-327/file1': Disk quota exceeded
-root -- 0 0 0 4 0 0
-fsgqa +- 2048 0 1024 3 0 0
+root 0 0 0
+fsgqa 2048 0 1024
diff --git a/tests/generic/328 b/tests/generic/328
index 705368e0d1..21ec9d3177 100755
--- a/tests/generic/328
+++ b/tests/generic/328
@@ -49,10 +49,8 @@ _require_fiemap
_require_quota
_require_nobody
_require_odirect
+_require_user
-_repquota() {
- repquota $SCRATCH_MNT | egrep '^(fsgqa|root|nobody)'
-}
rm -f $seqres.full
echo "Format and mount"
@@ -68,39 +66,40 @@ 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 fsgqa $testdir/file1
+chown $qa_user $testdir/file1
_cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full
_cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
-_repquota
+_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
+quotaon $SCRATCH_MNT 2> /dev/null
echo "Set hard quota to prevent rewrite"
-setquota -u fsgqa 0 1024 0 0 $SCRATCH_MNT
-_repquota
+setquota -u $qa_user 0 1024 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 2>&1 >> $seqres.full | \
+su $qa_user -c '$XFS_IO_PROG -d -c "pwrite 0 '$((sz+65536))'" '$testdir'/file1' 2>&1 >> $seqres.full | \
_filter_xfs_io_error
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Try to write the whole file"
-_pwrite_byte 0x62 0 $sz $testdir/file1 2>&1 >> $seqres.full | \
+su $qa_user -c '$XFS_IO_PROG -c "pwrite 0 '$((sz+65536))'" '$testdir'/file1' 2>&1 >> $seqres.full | \
_filter_xfs_io_error
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Set hard quota to allow rewrite"
-setquota -u fsgqa 0 8192 0 0 $SCRATCH_MNT
-_repquota
+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
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Try to write the whole file"
_pwrite_byte 0x62 0 $sz $testdir/file3 >> $seqres.full
sync
-_repquota
+_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
diff --git a/tests/generic/328.out b/tests/generic/328.out
index 463015111e..b7fe9f8cfc 100644
--- a/tests/generic/328.out
+++ b/tests/generic/328.out
@@ -1,25 +1,25 @@
QA output created by 328
Format and mount
Create the original files
-root -- 0 0 0 4 0 0
-fsgqa -- 3072 0 0 3 0 0
+root 0 0 0
+fsgqa 3072 0 0
Set hard quota to prevent rewrite
-root -- 0 0 0 4 0 0
-fsgqa +- 3072 0 1024 3 0 0
+root 0 0 0
+fsgqa 3072 0 1024
Try to dio write the whole file
pwrite: Disk quota exceeded
-root -- 0 0 0 4 0 0
-fsgqa +- 3072 0 1024 3 0 0
+root 0 0 0
+fsgqa 3072 0 1024
Try to write the whole file
pwrite: Disk quota exceeded
-root -- 0 0 0 4 0 0
-fsgqa +- 3072 0 1024 3 0 0
+root 0 0 0
+fsgqa 3072 0 1024
Set hard quota to allow rewrite
-root -- 0 0 0 4 0 0
-fsgqa -- 3072 0 8192 3 0 0
+root 0 0 0
+fsgqa 3072 0 8192
Try to dio write the whole file
-root -- 0 0 0 4 0 0
-fsgqa -- 3072 0 8192 3 0 0
+root 0 0 0
+fsgqa 3072 0 8192
Try to write the whole file
-root -- 0 0 0 4 0 0
-fsgqa -- 3072 0 8192 3 0 0
+root 0 0 0
+fsgqa 3072 0 8192
diff --git a/tests/xfs/213 b/tests/xfs/213
index d5cc129303..844166c167 100755
--- a/tests/xfs/213
+++ b/tests/xfs/213
@@ -52,10 +52,8 @@ _require_fiemap
_require_quota
_require_nobody
_require_xfs_io_command "cowextsize"
+_require_user
-_repquota() {
- repquota $SCRATCH_MNT | egrep '^(fsgqa|root|nobody)'
-}
rm -f $seqres.full
echo "Format and mount"
@@ -78,27 +76,27 @@ _cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
touch $testdir/urk
chown nobody $testdir/urk
touch $testdir/erk
-chown fsgqa $testdir/erk
-_repquota
+chown $qa_user $testdir/erk
+_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
echo "Change file ownership"
-chown fsgqa $testdir/file1
-chown fsgqa $testdir/file2
-chown fsgqa $testdir/file3
-_repquota
+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
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Remount the FS to see if accounting changes"
_scratch_cycle_mount
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Chown one of the files"
chown nobody $testdir/file3
-_repquota
+_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
diff --git a/tests/xfs/213.out b/tests/xfs/213.out
index be8d56c98c..7dd30dddea 100644
--- a/tests/xfs/213.out
+++ b/tests/xfs/213.out
@@ -1,22 +1,22 @@
QA output created by 213
Format and mount
Create the original files
-root -- 3072 0 0 7 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 0 0 0 1 0 0
+root 3072 0 0
+nobody 0 0 0
+fsgqa 0 0 0
Change file ownership
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
CoW one of the files
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3520 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3520 0 0
Remount the FS to see if accounting changes
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
Chown one of the files
-root -- 0 0 0 4 0 0
-nobody -- 1024 0 0 2 0 0
-fsgqa -- 2048 0 0 3 0 0
+root 0 0 0
+nobody 1024 0 0
+fsgqa 2048 0 0
diff --git a/tests/xfs/214 b/tests/xfs/214
index 35972c6fe8..01ffbaff41 100755
--- a/tests/xfs/214
+++ b/tests/xfs/214
@@ -53,10 +53,8 @@ _require_quota
_require_nobody
_require_xfs_io_command "cowextsize"
_require_odirect
+_require_user
-_repquota() {
- repquota $SCRATCH_MNT | egrep '^(fsgqa|root|nobody)'
-}
rm -f $seqres.full
echo "Format and mount"
@@ -79,27 +77,27 @@ _cp_reflink $testdir/file1 $testdir/file3 >> $seqres.full
touch $testdir/urk
chown nobody $testdir/urk
touch $testdir/erk
-chown fsgqa $testdir/erk
-_repquota
+chown $qa_user $testdir/erk
+_report_quota_blocks $SCRATCH_MNT
_scratch_cycle_mount
echo "Change file ownership"
-chown fsgqa $testdir/file1
-chown fsgqa $testdir/file2
-chown fsgqa $testdir/file3
-_repquota
+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 -d -f -c "pwrite -S 0x63 -b $blksz $((sz - blksz)) $blksz" -c "fsync" $testdir/file2 >> $seqres.full
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Remount the FS to see if accounting changes"
_scratch_cycle_mount
-_repquota
+_report_quota_blocks $SCRATCH_MNT
echo "Chown one of the files"
chown nobody $testdir/file3
-_repquota
+_report_quota_blocks $SCRATCH_MNT
# success, all done
status=0
diff --git a/tests/xfs/214.out b/tests/xfs/214.out
index 496a503682..2c7e358681 100644
--- a/tests/xfs/214.out
+++ b/tests/xfs/214.out
@@ -1,22 +1,22 @@
QA output created by 214
Format and mount
Create the original files
-root -- 3072 0 0 7 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 0 0 0 1 0 0
+root 3072 0 0
+nobody 0 0 0
+fsgqa 0 0 0
Change file ownership
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
CoW one of the files
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3520 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3520 0 0
Remount the FS to see if accounting changes
-root -- 0 0 0 4 0 0
-nobody -- 0 0 0 1 0 0
-fsgqa -- 3072 0 0 4 0 0
+root 0 0 0
+nobody 0 0 0
+fsgqa 3072 0 0
Chown one of the files
-root -- 0 0 0 4 0 0
-nobody -- 1024 0 0 2 0 0
-fsgqa -- 2048 0 0 3 0 0
+root 0 0 0
+nobody 1024 0 0
+fsgqa 2048 0 0