xfs/007: fix regressions on V4 filesystems
[xfstests-dev.git] / tests / xfs / 007
index 7e965a6..4f86410 100755 (executable)
@@ -6,35 +6,19 @@
 #
 # Test to verify Q_XQUOTARM functionality.
 #
-seq=`basename $0`
-seqres=$RESULT_DIR/$seq
-echo "QA output created by $seq"
+. ./common/preamble
+_begin_fstest auto quota quick
 
-here=`pwd`
-tmp=/tmp/$$
-status=1       # failure is the default!
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-_cleanup()
-{
-    cd /
-    rm -f $tmp.*
-}
-
-# get standard environment, filters and checks
-. ./common/rc
+# Import common functions.
 . ./common/filter
 . ./common/quota
 
 # Modify as appropriate.
 _supported_fs xfs
-_supported_os Linux
 
 _require_scratch
 _require_xfs_quota
 
-rm -f $seqres.full
-
 _scratch_mkfs_xfs | _filter_mkfs > /dev/null 2> $tmp.mkfs
 . $tmp.mkfs
 
@@ -56,8 +40,28 @@ do_test()
 
        _qmount
        echo "*** turn off $off_opts quotas"
-       xfs_quota -x -c "off -$off_opts" $SCRATCH_MNT
-       xfs_quota -x -c "remove -$off_opts" $SCRATCH_MNT
+       $XFS_QUOTA_PROG -x -c "off -$off_opts" $SCRATCH_MNT
+
+       # Remount the filesystem with no quota options to force quotas off.
+       # This takes care of newer kernels where quotaoff clears the superblock
+       # quota enforcement flags but doesn't shut down accounting.
+       _scratch_unmount
+       _qmount_option ""
+       _scratch_mount
+
+       rm_commands=(-x -c "remove -$off_opts")
+
+       # Remounting a V4 fs with no quota options means that the internal
+       # gquotino -> pquotino remapping does not happen.  If we want to
+       # truncate the "project" quota file we must run remove -g.  However,
+       # xfs_quota has a nasty sharp edge wherein passing '-g' and '-p' only
+       # results in a QUOTARM call for the group quota file, so we must make
+       # a separate remove call.
+       [ $_fs_has_crcs == 0 ] && [ "$off_opts" = "up" ] && \
+               rm_commands+=(-c "remove -g")
+
+       $XFS_QUOTA_PROG "${rm_commands[@]}" $SCRATCH_MNT
+
        echo "*** umount"
        _scratch_unmount
 
@@ -66,7 +70,6 @@ do_test()
        _scratch_xfs_db -c "inode $QINO_2" -c "p core.nblocks"
 }
 
-
 # Test user and group first
 _qmount_option "uquota,gquota"
 _qmount