Fix several xfs quota tests to work on non-xfs filesystems.
New _require function to be sure that the xfs_quota tool can operate
on foreign filesystems; if it can, and if it needs to, it adds "-f"
to the XFS_QUOTA_PROG variable.
Modify _qmount to do quotacheck/quotaon to mount and /enable/
quota. On xfs this isn't needed and/or fails; it's ignored.
All quota-related options used as arguments to _qmount are changed
from i.e. uquota to i.e. usrquota; the latter is standard across
almost all linux filesytems, including xfs.
xfs/260 filters out the root/default quota line, because ext4
consumes a different amount of space than xfs, and it's not what
we're testing for, so just ignore it.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Bill O'Donnell <billodo@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
[ -n "$XFS_QUOTA_PROG" ] || _notrun "XFS quota user tools not installed"
}
+#
+# checks that xfs_quota can operate on foreign (non-xfs) filesystems
+# Skips check on xfs filesystems, old xfs_quota is fine there.
+# Appends "-f" to enable foreign behavior on non-xfs filesystems if available.
+#
+_require_xfs_quota_foreign()
+{
+ if [ "$FSTYP" != "xfs" ]; then
+ $XFS_QUOTA_PROG -f -V &>/dev/null || \
+ _notrun "xfs_quota binary does not support foreign filesystems"
+ XFS_QUOTA_PROG="$XFS_QUOTA_PROG -f"
+ fi
+}
+
#
# checks that the XFS project quota support in the kernel is enabled.
#
{
_scratch_unmount >/dev/null 2>&1
_scratch_mount || _fail "qmount failed"
+ # xfs doesn't need these setups and quotacheck even fails on xfs
+ # redirect the output to $seqres.full for debug purpose and ignore results
+ if [ "$FSTYP" != "xfs" ]; then
+ quotacheck -ug $SCRATCH_MNT >>$seqres.full 2>&1
+ quotaon -ug $SCRATCH_MNT >>$seqres.full 2>&1
+ fi
chmod ugo+rwx $SCRATCH_MNT
}
trap "_cleanup; exit \$status" 0 1 2 3 15
# real QA test starts here
-_supported_fs xfs
+_supported_fs generic
_supported_os Linux IRIX
cp /dev/null $seqres.full
chmod ugo+rwx $seqres.full
_require_scratch
-_require_xfs_quota
+_require_quota
+_require_xfs_quota_foreign
_filter_stat()
{
_exercise()
{
- _scratch_mkfs_xfs >/dev/null 2>&1
+ _scratch_mkfs >/dev/null 2>&1
_qmount
umask 022
_scratch_unmount 2>/dev/null
}
-_scratch_mkfs_xfs >> $seqres.full 2>&1 || _fail "mkfs failed!"
+_scratch_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed!"
-_qmount_option "uquota,gquota"
+_qmount_option "usrquota,grpquota"
_qmount
if src/feature -G $SCRATCH_DEV ; then
:
echo "*** Default mount options"
_exercise
-_qmount_option "uquota"
+_qmount_option "usrquota"
echo "*** User quota mount option"
_exercise
-export MOUNT_OPTIONS="-o gquota"
-_qmount_option "gquota"
+_qmount_option "grpquota"
echo "*** Group quota mount option"
_exercise
-_qmount_option "uquota,gquota"
+_qmount_option "usrquota,grpquota"
echo "*** User and Group quota mount options"
_exercise
# real QA test starts here
# Modify as appropriate.
-_supported_fs xfs
+_supported_fs generic
_supported_os IRIX Linux
_require_scratch
-_require_xfs_quota
+_require_quota
+_require_xfs_quota_foreign
_chowning_file()
{
}
echo "mkfs on scratch"
-_scratch_mkfs_xfs >$seqres.full
+_scratch_mkfs >$seqres.full 2>&1
echo "mount with quotas"
-export MOUNT_OPTIONS="-o uquota"
+export MOUNT_OPTIONS="-o usrquota"
_scratch_mount
echo "creating quota file with holes"
rm -f $seqres.full
# real QA test starts here
-_supported_fs xfs
+_supported_fs generic
_supported_os Linux
_require_scratch
_require_quota
+_require_xfs_quota_foreign
# need user and group named 123456-fsgqa
_require_user 123456-fsgqa
_require_group 123456-fsgqa
-_scratch_mkfs_xfs >/dev/null 2>&1
-_qmount_option "uquota,gquota"
+_scratch_mkfs >/dev/null 2>&1
+_qmount_option "usrquota,grpquota"
_qmount
# user test
rm -f $seqres.full
# real QA test starts here
-_supported_fs xfs
+_supported_fs generic
_supported_os Linux
_require_scratch
_require_quota
+_require_xfs_quota_foreign
_require_user
_require_group
$XFS_QUOTA_PROG -x -c "limit bsoft=20M bhard=20M isoft=20 ihard=20 $type -d" $SCRATCH_MNT
$XFS_QUOTA_PROG -x -c "limit bsoft=40M bhard=40M isoft=40 ihard=40 $type fsgqa" $SCRATCH_MNT
echo "$qname blocks and inode limit"
- $XFS_QUOTA_PROG -x -c "report $type -N -bi" $SCRATCH_MNT | _filter_spaces
+ $XFS_QUOTA_PROG -x -c "report $type -N -bi" $SCRATCH_MNT | grep -v ^root | _filter_spaces
## blocks default quota test ##
_user_do "$XFS_IO_PROG -f -c \"pwrite 0 30M\" -c \"fsync\" $SCRATCH_MNT/data" | _filter_xfs_io
echo "$qname blocks quota after write 30M data"
- $XFS_QUOTA_PROG -x -c "report $type -N -b" $SCRATCH_MNT | _filter_spaces
+ $XFS_QUOTA_PROG -x -c "report $type -N -b" $SCRATCH_MNT | grep -v ^root | _filter_spaces
rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1
sync
echo "$qname inode quota after creating 30 inodes"
- $XFS_QUOTA_PROG -x -c "report $type -N -i" $SCRATCH_MNT | _filter_spaces
+ $XFS_QUOTA_PROG -x -c "report $type -N -i" $SCRATCH_MNT | grep -v ^root | _filter_spaces
rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1
}
### user default quota test ###
-_scratch_mkfs_xfs >/dev/null 2>&1
-_qmount_option "uquota,gquota"
+_scratch_mkfs >/dev/null 2>&1
+_qmount_option "usrquota,grpquota"
_qmount
do_test user
### group default quota test ###
_scratch_unmount
-_scratch_mkfs_xfs >/dev/null 2>&1
-_qmount_option "gquota,uquota"
+_scratch_mkfs >/dev/null 2>&1
+_qmount_option "grpquota,usrquota"
_qmount
do_test group
QA output created by 260
=== user quota test ===
user blocks and inode limit
-root 0 20480 20480 00 [--------] 3 20 20 00 [--------]
fsgqa 0 40960 40960 00 [--------] 0 40 40 00 [--------]
wrote 31457280/31457280 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
user blocks quota after write 30M data
-root 0 20480 20480 00 [--------]
fsgqa 30720 40960 40960 00 [--------]
user inode quota after creating 30 inodes
-root 3 20 20 00 [--------]
fsgqa 30 40 40 00 [--------]
=== group quota test ===
group blocks and inode limit
-root 0 20480 20480 00 [--------] 3 20 20 00 [--------]
fsgqa 0 40960 40960 00 [--------] 0 40 40 00 [--------]
wrote 31457280/31457280 bytes at offset 0
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
group blocks quota after write 30M data
-root 0 20480 20480 00 [--------]
fsgqa 30720 40960 40960 00 [--------]
group inode quota after creating 30 inodes
-root 3 20 20 00 [--------]
fsgqa 30 40 40 00 [--------]