mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfs: modify quota tests to work on generic filesystems
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>
This commit is contained in:
@@ -77,6 +77,20 @@ _require_xfs_quota()
|
|||||||
[ -n "$XFS_QUOTA_PROG" ] || _notrun "XFS quota user tools not installed"
|
[ -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.
|
# checks that the XFS project quota support in the kernel is enabled.
|
||||||
#
|
#
|
||||||
@@ -169,6 +183,12 @@ _qmount()
|
|||||||
{
|
{
|
||||||
_scratch_unmount >/dev/null 2>&1
|
_scratch_unmount >/dev/null 2>&1
|
||||||
_scratch_mount || _fail "qmount failed"
|
_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
|
chmod ugo+rwx $SCRATCH_MNT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
-9
@@ -44,14 +44,15 @@ _cleanup()
|
|||||||
trap "_cleanup; exit \$status" 0 1 2 3 15
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
_supported_fs xfs
|
_supported_fs generic
|
||||||
_supported_os Linux IRIX
|
_supported_os Linux IRIX
|
||||||
|
|
||||||
cp /dev/null $seqres.full
|
cp /dev/null $seqres.full
|
||||||
chmod ugo+rwx $seqres.full
|
chmod ugo+rwx $seqres.full
|
||||||
|
|
||||||
_require_scratch
|
_require_scratch
|
||||||
_require_xfs_quota
|
_require_quota
|
||||||
|
_require_xfs_quota_foreign
|
||||||
|
|
||||||
_filter_stat()
|
_filter_stat()
|
||||||
{
|
{
|
||||||
@@ -67,7 +68,7 @@ _filter_stat()
|
|||||||
|
|
||||||
_exercise()
|
_exercise()
|
||||||
{
|
{
|
||||||
_scratch_mkfs_xfs >/dev/null 2>&1
|
_scratch_mkfs >/dev/null 2>&1
|
||||||
_qmount
|
_qmount
|
||||||
|
|
||||||
umask 022
|
umask 022
|
||||||
@@ -99,9 +100,9 @@ _exercise()
|
|||||||
_scratch_unmount 2>/dev/null
|
_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
|
_qmount
|
||||||
if src/feature -G $SCRATCH_DEV ; then
|
if src/feature -G $SCRATCH_DEV ; then
|
||||||
:
|
:
|
||||||
@@ -114,16 +115,15 @@ _qmount_option "rw" # no quota options
|
|||||||
echo "*** Default mount options"
|
echo "*** Default mount options"
|
||||||
_exercise
|
_exercise
|
||||||
|
|
||||||
_qmount_option "uquota"
|
_qmount_option "usrquota"
|
||||||
echo "*** User quota mount option"
|
echo "*** User quota mount option"
|
||||||
_exercise
|
_exercise
|
||||||
|
|
||||||
export MOUNT_OPTIONS="-o gquota"
|
_qmount_option "grpquota"
|
||||||
_qmount_option "gquota"
|
|
||||||
echo "*** Group quota mount option"
|
echo "*** Group quota mount option"
|
||||||
_exercise
|
_exercise
|
||||||
|
|
||||||
_qmount_option "uquota,gquota"
|
_qmount_option "usrquota,grpquota"
|
||||||
echo "*** User and Group quota mount options"
|
echo "*** User and Group quota mount options"
|
||||||
_exercise
|
_exercise
|
||||||
|
|
||||||
|
|||||||
+5
-4
@@ -47,11 +47,12 @@ _cleanup()
|
|||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
|
|
||||||
# Modify as appropriate.
|
# Modify as appropriate.
|
||||||
_supported_fs xfs
|
_supported_fs generic
|
||||||
_supported_os IRIX Linux
|
_supported_os IRIX Linux
|
||||||
|
|
||||||
_require_scratch
|
_require_scratch
|
||||||
_require_xfs_quota
|
_require_quota
|
||||||
|
_require_xfs_quota_foreign
|
||||||
|
|
||||||
_chowning_file()
|
_chowning_file()
|
||||||
{
|
{
|
||||||
@@ -72,10 +73,10 @@ _chowning_file()
|
|||||||
}
|
}
|
||||||
|
|
||||||
echo "mkfs on scratch"
|
echo "mkfs on scratch"
|
||||||
_scratch_mkfs_xfs >$seqres.full
|
_scratch_mkfs >$seqres.full 2>&1
|
||||||
|
|
||||||
echo "mount with quotas"
|
echo "mount with quotas"
|
||||||
export MOUNT_OPTIONS="-o uquota"
|
export MOUNT_OPTIONS="-o usrquota"
|
||||||
_scratch_mount
|
_scratch_mount
|
||||||
|
|
||||||
echo "creating quota file with holes"
|
echo "creating quota file with holes"
|
||||||
|
|||||||
+4
-3
@@ -47,17 +47,18 @@ _cleanup()
|
|||||||
rm -f $seqres.full
|
rm -f $seqres.full
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
_supported_fs xfs
|
_supported_fs generic
|
||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
_require_scratch
|
_require_scratch
|
||||||
_require_quota
|
_require_quota
|
||||||
|
_require_xfs_quota_foreign
|
||||||
|
|
||||||
# need user and group named 123456-fsgqa
|
# need user and group named 123456-fsgqa
|
||||||
_require_user 123456-fsgqa
|
_require_user 123456-fsgqa
|
||||||
_require_group 123456-fsgqa
|
_require_group 123456-fsgqa
|
||||||
|
|
||||||
_scratch_mkfs_xfs >/dev/null 2>&1
|
_scratch_mkfs >/dev/null 2>&1
|
||||||
_qmount_option "uquota,gquota"
|
_qmount_option "usrquota,grpquota"
|
||||||
_qmount
|
_qmount
|
||||||
|
|
||||||
# user test
|
# user test
|
||||||
|
|||||||
+9
-8
@@ -52,10 +52,11 @@ _cleanup()
|
|||||||
rm -f $seqres.full
|
rm -f $seqres.full
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
_supported_fs xfs
|
_supported_fs generic
|
||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
_require_scratch
|
_require_scratch
|
||||||
_require_quota
|
_require_quota
|
||||||
|
_require_xfs_quota_foreign
|
||||||
_require_user
|
_require_user
|
||||||
_require_group
|
_require_group
|
||||||
|
|
||||||
@@ -78,12 +79,12 @@ do_test()
|
|||||||
$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=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
|
$XFS_QUOTA_PROG -x -c "limit bsoft=40M bhard=40M isoft=40 ihard=40 $type fsgqa" $SCRATCH_MNT
|
||||||
echo "$qname blocks and inode limit"
|
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 ##
|
## blocks default quota test ##
|
||||||
_user_do "$XFS_IO_PROG -f -c \"pwrite 0 30M\" -c \"fsync\" $SCRATCH_MNT/data" | _filter_xfs_io
|
_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"
|
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
|
rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1
|
||||||
|
|
||||||
@@ -94,22 +95,22 @@ do_test()
|
|||||||
sync
|
sync
|
||||||
|
|
||||||
echo "$qname inode quota after creating 30 inodes"
|
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
|
rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
### user default quota test ###
|
### user default quota test ###
|
||||||
_scratch_mkfs_xfs >/dev/null 2>&1
|
_scratch_mkfs >/dev/null 2>&1
|
||||||
_qmount_option "uquota,gquota"
|
_qmount_option "usrquota,grpquota"
|
||||||
_qmount
|
_qmount
|
||||||
|
|
||||||
do_test user
|
do_test user
|
||||||
|
|
||||||
### group default quota test ###
|
### group default quota test ###
|
||||||
_scratch_unmount
|
_scratch_unmount
|
||||||
_scratch_mkfs_xfs >/dev/null 2>&1
|
_scratch_mkfs >/dev/null 2>&1
|
||||||
_qmount_option "gquota,uquota"
|
_qmount_option "grpquota,usrquota"
|
||||||
_qmount
|
_qmount
|
||||||
|
|
||||||
do_test group
|
do_test group
|
||||||
|
|||||||
@@ -1,31 +1,25 @@
|
|||||||
QA output created by 260
|
QA output created by 260
|
||||||
=== user quota test ===
|
=== user quota test ===
|
||||||
user blocks and inode limit
|
user blocks and inode limit
|
||||||
root 0 20480 20480 00 [--------] 3 20 20 00 [--------]
|
|
||||||
fsgqa 0 40960 40960 00 [--------] 0 40 40 00 [--------]
|
fsgqa 0 40960 40960 00 [--------] 0 40 40 00 [--------]
|
||||||
|
|
||||||
wrote 31457280/31457280 bytes at offset 0
|
wrote 31457280/31457280 bytes at offset 0
|
||||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
user blocks quota after write 30M data
|
user blocks quota after write 30M data
|
||||||
root 0 20480 20480 00 [--------]
|
|
||||||
fsgqa 30720 40960 40960 00 [--------]
|
fsgqa 30720 40960 40960 00 [--------]
|
||||||
|
|
||||||
user inode quota after creating 30 inodes
|
user inode quota after creating 30 inodes
|
||||||
root 3 20 20 00 [--------]
|
|
||||||
fsgqa 30 40 40 00 [--------]
|
fsgqa 30 40 40 00 [--------]
|
||||||
|
|
||||||
=== group quota test ===
|
=== group quota test ===
|
||||||
group blocks and inode limit
|
group blocks and inode limit
|
||||||
root 0 20480 20480 00 [--------] 3 20 20 00 [--------]
|
|
||||||
fsgqa 0 40960 40960 00 [--------] 0 40 40 00 [--------]
|
fsgqa 0 40960 40960 00 [--------] 0 40 40 00 [--------]
|
||||||
|
|
||||||
wrote 31457280/31457280 bytes at offset 0
|
wrote 31457280/31457280 bytes at offset 0
|
||||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
group blocks quota after write 30M data
|
group blocks quota after write 30M data
|
||||||
root 0 20480 20480 00 [--------]
|
|
||||||
fsgqa 30720 40960 40960 00 [--------]
|
fsgqa 30720 40960 40960 00 [--------]
|
||||||
|
|
||||||
group inode quota after creating 30 inodes
|
group inode quota after creating 30 inodes
|
||||||
root 3 20 20 00 [--------]
|
|
||||||
fsgqa 30 40 40 00 [--------]
|
fsgqa 30 40 40 00 [--------]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user