xfstests: enable generic filesystems on some ENOSPC tests
PATCH 1/1 xfstests: enable generic filesystems on some ENOSPC tests
Make tests 083, 109, and 204 generic.
This adds a new _scratch_mkfs_sized which can create a filesystem of a specific size (and optionally with a specific blocksize), which lets the various small-filesystem ENOSPC tests run.
It also adds an "enospc" group which seemed useful to me.
There are still xfs filesystem specific calls in some of these tests; they specified an agcount and that doesn't translate into something generic, so left it there for now.
Right now 083 fails on ext4 with fileystem corruption, and 204 fails due to ENOSPC apparently not flushing delalloc/prealloc, which leads to premature ENOSPC (after the test completes, 38M is free again after a manual sync).
test 205 is too xfs-geometry-specific to be generic; it carefully calculates freespace of a very specific xfs geometry.
---
083 +0 -0
@@ -54,7 +54,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
. ./common.filter
# real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os IRIX Linux
_require_scratch
@@ -70,10 +70,15 @@ workout()
nops=$4 umount $SCRATCH_DEV >/dev/null 2>&1 - echo "*** mkfs -dsize=$fsz,agcount=$ags" >>$seq.full - echo "" >>$seq.full - _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full 2>&1 \ - || _fail "size=$fsz,agcount=$ags mkfs failed" + if [ "$FSTYP" == "xfs" ]; then + echo "*** mkfs -dsize=$fsz,agcount=$ags" >>$seq.full + echo "" >>$seq.full + _scratch_mkfs_xfs -dsize=$fsz,agcount=$ags >>$seq.full 2>&1 \
+ || _fail "size=$fsz,agcount=$ags mkfs failed"
+ else
+ _scratch_mkfs_sized $fsz >>$seq.full 2>&1 \
+ || _fail "size=$fsz mkfs failed"
+ fi
_scratch_mount >>$seq.full 2>&1 \ || _fail "mount failed"
@@ -85,12 +90,13 @@ workout()
echo "*** test out-of-space handling for random write operations"
-filesize=100m
+# 100m
+let fssize=100*1024*1024
agcount=6
numprocs=15
numops=1500
-workout $filesize $agcount $numprocs $numops
+workout $fssize $agcount $numprocs $numops
echo "*** done"
status=0
109 +0 -0
@@ -3,6 +3,8 @@
#
# ENOSPC deadlock case from Asano Masahiro.
#
+# Originally for xfs, expanded to test ENOSPC on other filesystems +#
#-----------------------------------------------------------------------
# Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. #
@@ -37,7 +39,7 @@ trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 . ./common.filter
# real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os Linux XFS _require_scratch
@@ -51,7 +53,7 @@ populate()
i=0 while [ $i -le $files -a "X$faststart" = "X" ]; do file=$SCRATCH_MNT/f$i - xfs_io -f -d -c 'pwrite -b 64k 0 64k' $file >/dev/null + xfs_io -F -f -d -c 'pwrite -b 64k 0 64k' $file >/dev/null let i=$i+1 done
@@ -78,7 +80,7 @@ allocate()
{
j=0
while [ $j -lt 100 ]; do
- xfs_io -f -c 'pwrite -b 64k 0 16m' $file \
+ xfs_io -F -f -c 'pwrite -b 64k 0 16m' $file \
>/dev/null 2>&1
rm $file
let j=$j+1@@ -97,13 +99,21 @@ _scratch_mount
# see if faststart is possible (and requested) files=2000 +# 160m +let fssize=160*1024*1024 + faststart="" if [ -n "$FASTSTART" -a -f $SCRATCH_MNT/f0 ]; then faststart="-N" # causes us to skip the mkfs step fi umount $SCRATCH_DEV
-_scratch_mkfs_xfs -dsize=160m,agcount=4 $faststart | _filter_mkfs 2>$tmp.mkfs +if [ "$FSTYP" == "xfs" ]; then
+ _scratch_mkfs_xfs -dsize=$fssize,agcount=4 $faststart 2>$tmp.mkfs
+else
+ _scratch_mkfs_sized $fssize 2>$tmp.mkfs
+fi
+
cat $tmp.mkfs >>$seq.full_scratch_mount
109.out +0 -0
@@ -1,10 +1,4 @@
QA output created by 109
-meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
-data = bsize=XXX blocks=XXX, imaxpct=PCT - = sunit=XXX swidth=XXX, unwritten=X -naming =VERN bsize=XXX -log =LDEV bsize=XXX blocks=XXX
-realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX creating small files...
removing small files...
flushing changes via umount/mount.
204 +0 -0
@@ -35,12 +35,14 @@ status=1 # failure is the default!
. ./common.filter
# real QA test starts here -_supported_fs xfs +_supported_fs generic _supported_os Linux
_require_scratch
-_scratch_mkfs_xfs -d size=104m >/dev/null
+let fssize=104*1024*1024
+
+_scratch_mkfs_sized $fssize >/dev/null_scratch_mount
for i in seq 1 22500; do
common.rc +0 -0
@@ -237,6 +237,27 @@ _scratch_mkfs_options() echo $SCRATCH_OPTIONS $MKFS_OPTIONS $* $SCRATCH_DEV
}
+# arg 1 is size in bytes, arg 2 is (optional) blocksize +_scratch_mkfs_sized()
+{
+ fssz=$1 + bsz=$2 + [ -z "$bsz" ] && bsz=4096 + let blocks=$fssz/$bsz
+
+ case $FSTYP in
+ xfs)
+ _scratch_mkfs_xfs -d size=$fssz -b size=$bsz
+ ;;
+ ext2|ext3|ext4)
+ /sbin/mkfs -t $FSTYP -- $MKFS_OPTIONS -b $bsz $SCRATCH_DEV $blocks > /dev/null
+ ;;
+ *)
+ _notrun "Filesystem $FSTYP not supported in _scratch_mkfs_sized"
+ ;;
+ esac
+}
+_scratch_mkfs_xfs()
{
# extra mkfs options can be added by tests
group +0 -0
@@ -189,7 +189,7 @@ prealloc
080 rw ioctl
081 log logprint quota auto quick
082 log logprint v2log auto quick
-083 rw auto
+083 rw enospc auto
084 ioctl rw auto
085 log auto quick
086 log v2log auto
@@ -215,7 +215,7 @@ prealloc
106 quota
107 quota
108 quota
-109 metadata auto
+109 metadata enospc auto
110 repair auto
111 ioctl
112 rw aio auto quick
@@ -280,7 +280,7 @@ prealloc
# the next three tests are not deterministic enough to get the # "right" result on all platforms/configuration, so don't run # them by default. -171 rw filestreams +171 rw filestreams enospc 172 rw filestreams 173 rw filestreams 174 rw filestreams auto @@ -313,8 +313,8 @@ prealloc 201 metadata auto quick 202 repair auto quick 203 ioctl auto -204 metadata rw auto -205 metadata rw auto +204 metadata rw enospc auto +205 metadata rw enospc auto 206 growfs auto quick 207 auto aio quick 208 auto aio
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
The change to 204 and the infrastructure seems fine for me, but I don't really like how the other use an explicit agcount (which at least for 109 was very intentional) for xfs and just defaults for others. At least 109 should be duplicated into a generic one run everywhere and an xfs-specific with the agcount. Need to look a bit more at the history of 083 to max a decision for that one. And some less cryptic variable names in the new code would also be nice.
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs