Fix tests to work on non-4k block sized fs instances
v5 cover Fix tests to work on non-4k block sized fs instances
This patchset fixes tests (mostly XFS specific ones) to work on variable block size. These patches now use the output of "od" utility to verify the contents of the test files instead of the md5sum utility.
Also, The patchset modifies _filter_fiemap() filter function to optionally print the file offset range in block size units.
Changelog:V4->V5:
1. Fix xfs/299 to work with an XFS filesystem with 1k as the block size. To make this happen this patchset increases the block quota limit appropriately.
V3->V4:
1. The following tests now use _get_file_block_size() function to obtain the underlying filesystem's block size.
xfs/009
xfs/074
xfs/139
xfs/140
xfs/299
generic/018
generic/177
generic/130
2. xfs/139 now creates a scratch filesystem with AG size of 8192 filesystem blocks instead of the previously used 4400 filesystem blocks.
3. xfs/050 has now been fixed to work with 512 byte sized filesystem blocks. The "block soft" limit and "block hard" limit values have been increased to enable the user to have enough blocks in quota to be able to create the required test files when using 512 byte filesystem blocks.
4. The patch for xfs/299 has now been split into two. The first one fixes a bug in the test when using 4k block size and the second one lets the user execute the test on 64k block sized filesystems.
Thanks to Darrick J Wong and Zorro Lang for their review comments.
V2->V3:
Added fixes for getting generic/018, generic/108 and generic/459 tests to work in 64k block size scenario.
V1->V2:
Eryu Guan pointed out that some of the tests were obtaining the filesystem's block size value from $TEST_DIR even though the test was executed on the $SCRATCH_DEV's filesystem. This version of the patchset fixes the following tests to obtain the block size from $SCRATCH_MNT. The relevant changes was made to the following tests:
xfs/009, xfs/050, xfs/074, xfs/139, xfs/140, xfs/190, xfs/299, generic/177 and generic/230.
Chandan Rajendra (20):
Fix xfs/009 to work with 64k block size xfs/050: Fix "Push past soft inode limit" case Fix xfs/050 to work with 64k block size
Fix xfs/074 to work with 64k block size
Fix xfs/127 to work with 64k block size
Fix xfs/139 to work with 64k block size
Fix xfs/140 to work with 64k block size
Fix xfs/190 to work with 64k block size xfs/299: Fix "Push past soft inode limit" case Fix xfs/299 to work with 64k block size xfs/325: Inject free_extent error after CoW operation Fix generic/102 to work with 64k block size Fix generic/172 to work with 64k block size Filter fiemap output by FS block size
Fix generic/177 to work with 64k block size Fix generic/230 to work with 64k block size Fix generic/235 to work with 64k block size Fix generic/459 to work with 64k block size Fix generic/018 to work with 64k block size Fix generic/108 to work with 64k block size
common/punch | 19 ++++++++--- tests/generic/018 | 2 +- tests/generic/102 | 4 +-- tests/generic/102.out | 20 +++++------ tests/generic/108 | 4 +-- tests/generic/172 | 4 +-- tests/generic/177 | 20 ++++++----- tests/generic/177.out | 23 ++++++++----- tests/generic/230 | 23 +++++++------ tests/generic/230.out | 16 ++++----- tests/generic/235 | 2 +- tests/generic/235.out | 4 +-- tests/generic/459 | 14 ++++---- tests/xfs/009 | 92 ++++++++++++++++++++++++++++++++++++++++++--------- tests/xfs/009.out | 66 ++++++++++++++++++------------------ tests/xfs/050 | 26 ++++++++++----- tests/xfs/050.out | 60 ++++++++++++++++----------------- tests/xfs/074 | 23 ++++++++++--- tests/xfs/127 | 2 +- tests/xfs/139 | 15 +++++---- tests/xfs/139.out | 8 +++-- tests/xfs/140 | 12 ++++--- tests/xfs/190 | 26 ++++++++++----- tests/xfs/299 | 29 ++++++++++------ tests/xfs/299.out | 48 +++++++++++++-------------- tests/xfs/325 | 5 +-- tests/xfs/325.out | 2 +- 27 files changed, 352 insertions(+), 217 deletions(-)
Signature · 1 line
2.9.5
PATCH v5 1/20 Fix xfs/009 to work with 64k block size
xfs_alloc_file_space() rounds up allocation requests by the filesystem block size. Hence this commit changes the test to work with block size units rather than with a multiple of 4096 bytes.
--- tests/xfs/009 | 92 ++++++++++++++++++++++++++++++++++++++++++++++--------- tests/xfs/009.out | 66 +++++++++++++++++++-------------------- 2 files changed, 110 insertions(+), 48 deletions(-)
tests/xfs/009 +77 -15
@@ -14,9 +14,6 @@ here=`pwd` tmp=/tmp/$$ status=1 # failure is the default! trap "_cleanup; exit \$status" 0 1 2 3 15 -# This isn't really related to fs block size, it's just what -# alloc uses for the "block" unit in it's input parameters... -bsize=4096 _cleanup() {
@@ -24,13 +21,6 @@ _cleanup() _scratch_unmount } -_block_filter() -{ - sed \ - -e 's/[0-9][0-9]*\.\.[0-9][0-9]*/BLOCKRANGE/g' \ - -e "s/blocksize $bsize/blocksize BSIZE/g" -} - _init() { echo "*** mkfs"
@@ -49,11 +39,6 @@ _init() fi } -_filesize() -{ - ls -l $1 | $AWK_PROG '{print "filesize = " $5}' -} - # get standard environment, filters and checks . ./common/rc . ./common/filter
@@ -64,9 +49,86 @@ _supported_os Linux _require_scratch +_filesize() +{ + ls -l $1 | $AWK_PROG -v bsize="$bsize" '{print "filesize = " $5 / bsize}' +} + +_block_filter() +{ + $AWK_PROG -v bsize="$bsize" ' + /blocksize/ { + printf(" blocksize BSIZE\n") + + next + } + + /CMD/ { + split($3, off, "=") + offset = strtonum(off[2]) + if (offset != -1) + offset = offset / bsize + + split($4, len, "=") + nr_blocks = strtonum(len[2]) + if (nr_blocks != -1) + nr_blocks = nr_blocks / bsize + + printf(" %s %s off=%s, len=%d\n", $1, $2, offset, nr_blocks) + + next + } + + /MAP/ { + split($2, off, "=") + offset = strtonum(off[2]) + if (offset != -1) + offset = offset / bsize + + split($3, len, "=") + + nr_blocks = strtonum(len[2]) + + if (nr_blocks != -1) + nr_blocks = nr_blocks / bsize + + printf(" %s off=%s, len=%d %s\n", $1, offset, nr_blocks, $4) + + next + } + + /TRUNCATE/ { + split($2, off, "=") + offset = strtonum(off[2]) / bsize + + printf(" %s off=%s\n", $1, offset) + + next + } + + /\[[0-9]+,[0-9]+\]:/ { + printf(" %s BLOCKRANGE\n", $1) + + next + } + + { + print + + next + } + ' +} + _init out=$SCRATCH_MNT/$$.tmp +# This isn't really related to fs block size, it's just what +# alloc uses for the "block" unit in it's input parameters... +# However, xfs_alloc_file_space() rounds up allocation +# request by the filesystem's block size. +bsize=$(_get_file_block_size $SCRATCH_MNT) + # since we're using a clean FS here, we make some assumptions # about availability of contiguous blocks
tests/xfs/009.out +33 -33
138 lines not on this page · raw message
Signature · 1 line
2.9.5
PATCH v5 2/20 xfs/050: Fix "Push past soft inode limit" case
In reply to Chandan RajendraThe test sets an inode soft limit of four but only three files are created. This commit creates two more files in order to really push past the soft inode limit.
--- tests/xfs/050 | 2 ++ tests/xfs/050.out | 36 ++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 18 deletions(-)
tests/xfs/050 +2 -0
@@ -143,6 +143,8 @@ _exercise() echo "*** push past the soft inode limit" | tee -a $seqres.full _file_as_id $SCRATCH_MNT/softie1 $id $type 1024 0 _file_as_id $SCRATCH_MNT/softie2 $id $type 1024 0 + _file_as_id $SCRATCH_MNT/softie3 $id $type 1024 0 + _file_as_id $SCRATCH_MNT/softie4 $id $type 1024 0 _qmount xfs_quota -D $tmp.projects -P $tmp.projid -x \ -c "repquota -birnN -$type" $SCRATCH_DEV |
tests/xfs/050.out +18 -18
@@ -16,11 +16,11 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------]
@@ -48,11 +48,11 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------]
@@ -80,19 +80,19 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [--------] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** unmount *** gqnoenforce
@@ -112,19 +112,19 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [--------] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** unmount *** pquota
@@ -144,11 +144,11 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------]
@@ -176,18 +176,18 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [--------] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** unmount
Signature · 1 line
2.9.5
PATCH v5 3/20 Fix xfs/050 to work with 64k block size
In reply to Chandan RajendraThis commit changes the test to calculate quota limits based on the block size of the underlying filesystem. Also, the sizes of the test files are now made to be a multiple of the filesystem block size.
--- tests/xfs/050 | 24 ++++++++++++++-------- tests/xfs/050.out | 60 +++++++++++++++++++++++++++---------------------------- 2 files changed, 46 insertions(+), 38 deletions(-)
tests/xfs/050 +16 -8
@@ -38,8 +38,13 @@ chmod a+rwx $seqres.full # arbitrary users will write here _require_scratch _require_xfs_quota -bsoft=100 -bhard=500 +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount +bsize=$(_get_file_block_size $SCRATCH_MNT) +_scratch_unmount + +bsoft=$(( 200 * $bsize )) +bhard=$(( 1000 * $bsize )) isoft=4 ihard=10
@@ -55,7 +60,9 @@ _filter_report() if ($ENV{'LARGE_SCRATCH_DEV'}) { $val = $ENV{'NUM_SPACE_FILES'}; } - s/(^\[ROOT\] \S+ \S+ \S+ \S+ \[--------\] )(\S+)/$1@{[$2 - $val]}/g' + s/(^\[ROOT\] \S+ \S+ \S+ \S+ \[--------\] )(\S+)/$1@{[$2 - $val]}/g' | + perl -npe ' + s|^(.*?) (\d+) (\d+) (\d+)|$1 @{[$2 * 1024 /'$bsize']} @{[$3 * 1024 /'$bsize']} @{[$4 * 1024 /'$bsize']}|' } # The actual point at which limit enforcement takes place for the
@@ -70,9 +77,10 @@ _filter_and_check_blks() if (/^\#'$id'\s+(\d+)/ && '$enforce') { $maximum = '$bhard'; $minimum = '$bhard' * 85/100; - if (($1 < $minimum || $1 > $maximum) && '$noextsz') { + $used = $1 * 1024; + if (($used < $minimum || $used > $maximum) && '$noextsz') { printf(" URK %d: %d is out of range! [%d,%d]\n", - '$id', $1, $minimum, $maximum); + '$id', $used, $minimum, $maximum); } s/^(\#'$id'\s+)(\d+)/\1 =OK=/g; }
@@ -132,7 +140,7 @@ _exercise() echo "ls -l $SCRATCH_MNT" >>$seqres.full ls -l $SCRATCH_MNT >>$seqres.full xfs_quota -D $tmp.projects -P $temp.projid -x \ - -c "limit -$type bsoft=${bsoft}k bhard=${bhard}k $id" \ + -c "limit -$type bsoft=${bsoft} bhard=${bhard} $id" \ -c "limit -$type isoft=$isoft ihard=$ihard $id" \ $SCRATCH_DEV xfs_quota -D $tmp.projects -P $tmp.projid -x \
@@ -152,7 +160,7 @@ _exercise() echo echo "*** push past the soft block limit" | tee -a $seqres.full - _file_as_id $SCRATCH_MNT/softie $id $type 1024 140 + _file_as_id $SCRATCH_MNT/softie $id $type $bsize 300 _qmount xfs_quota -D $tmp.projects -P $tmp.projid -x \ -c "repquota -birnN -$type" $SCRATCH_DEV |
@@ -173,7 +181,7 @@ _exercise() echo # Note: for quota accounting (not enforcement), EDQUOT is not expected echo "*** push past the hard block limit (expect EDQUOT)" | tee -a $seqres.full - _file_as_id $SCRATCH_MNT/softie $id $type 1024 540 + _file_as_id $SCRATCH_MNT/softie $id $type $bsize 1200 echo "ls -l $SCRATCH_MNT" >>$seqres.full ls -l $SCRATCH_MNT >>$seqres.full _qmount
tests/xfs/050.out +30 -30
167 lines not on this page · raw message
Signature · 1 line
2.9.5
PATCH v5 4/20 Fix xfs/074 to work with 64k block size
In reply to Chandan RajendraThis commit makes file and extent size calculations to be a function of the filesystem's block size. It also adds a brief description of the bug that is being tested.
--- tests/xfs/074 | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)
tests/xfs/074 +19 -4
@@ -7,6 +7,18 @@ # Check some extent size hint boundary conditions that can result in # MAXEXTLEN overflows. # +# In xfs_bmap_extsize_align(), we had, +# if ((temp = (align_alen % extsz))) { +# align_alen += extsz - temp; +# } +# align_alen had the value of 2097151 (i.e. MAXEXTLEN) blocks. extsz had +# the value of 4096 blocks. +# +# align_alen % extsz will be 4095. so align_alen will end up having +# 2097151 + (4096 - 4095) = 2097152 i.e. (MAXEXTLEN + 1). Thus the length +# of the new extent will be larger than MAXEXTLEN. This will later cause +# the bmbt leaf to have an entry whose length is set to zero block count. +# seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq"
@@ -46,19 +58,22 @@ mkdir -p $LOOP_MNT $XFS_IO_PROG -ft -c "truncate 1t" $LOOP_FILE >> $seqres.full LOOP_DEV=`_create_loop_device $LOOP_FILE` -_mkfs_dev -d size=156452m,agcount=4 -l size=32m $LOOP_DEV +_mkfs_dev -d size=260g,agcount=2 $LOOP_DEV _mount $LOOP_DEV $LOOP_MNT +BLOCK_SIZE=$(_get_file_block_size $LOOP_MNT) + # Corrupt the BMBT by creating extents larger than MAXEXTLEN +# For 4k blocksize, MAXEXTLEN * 4k = 2097151 * 4k = 8589930496 = ~8GiB $XFS_IO_PROG -ft \ - -c "extsize 16m" \ - -c "falloc 0 30g" \ + -c "extsize $(($BLOCK_SIZE * 4096))" \ + -c "falloc 0 $(($BLOCK_SIZE * 2097152))" \ $LOOP_MNT/foo >> $seqres.full umount $LOOP_MNT _check_xfs_filesystem $LOOP_DEV none none -_mkfs_dev -f -l size=32m $LOOP_DEV +_mkfs_dev -f $LOOP_DEV _mount $LOOP_DEV $LOOP_MNT # check we trim both ends of the extent approproiately; this will fail
Signature · 1 line
2.9.5
PATCH v5 5/20 Fix xfs/127 to work with 64k block size
In reply to Chandan RajendraWith reflink feature enabled, we require atleast 500MiB of disk space to create a filesystem with 64k block size. Hence this commit sets the size of the scratch filesystem to 512MiB.
--- tests/xfs/127 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tests/xfs/127 +1 -1
@@ -34,7 +34,7 @@ _require_no_large_scratch_dev _require_cp_reflink echo "Format and mount" -_scratch_mkfs_sized $((2 * 4096 * 4096)) > $seqres.full 2>&1 +_scratch_mkfs_sized $((512 * 1024 * 1024)) > $seqres.full 2>&1 _scratch_mount >> $seqres.full 2>&1 testdir=$SCRATCH_MNT/test-$seq
Signature · 1 line
2.9.5
PATCH v5 6/20 Fix xfs/139 to work with 64k block size
In reply to Chandan RajendraFor 64k block size, the agsize provided in the test causes mkfs.xfs to fail due to insufficient log space. Hence this commit computes agsize based on block size of the filesystem.
--- tests/xfs/139 | 15 +++++++++------ tests/xfs/139.out | 8 ++++++-- 2 files changed, 15 insertions(+), 8 deletions(-)
tests/xfs/139 +9 -6
@@ -34,17 +34,20 @@ _require_cp_reflink rm -f $seqres.full +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount +blksz=$(_get_file_block_size $SCRATCH_MNT) +_scratch_unmount + echo "Format and mount" -_scratch_mkfs -d agsize=$((32 * 1048576)) > $seqres.full 2>&1 +_scratch_mkfs -d agsize=$((8192 * $blksz)) > $seqres.full 2>&1 _scratch_mount >> $seqres.full 2>&1 testdir=$SCRATCH_MNT/test-$seq mkdir $testdir -blksz="$(_get_block_size $testdir)" echo "Create the original files" -sz=$((48 * 1048576)) -nr=$((sz / blksz)) +sz=$((12288 * $blksz)) _pwrite_byte 0x61 0 $sz $testdir/file1 >> $seqres.full _cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full _scratch_cycle_mount
@@ -54,8 +57,8 @@ _pwrite_byte 0x62 0 $sz $testdir/file1 >> $seqres.full _scratch_cycle_mount echo "Compare files" -md5sum $testdir/file1 | _filter_scratch -md5sum $testdir/file2 | _filter_scratch +od -t x1 $testdir/file1 | _filter_od +od -t x1 $testdir/file2 | _filter_od #filefrag -v $testdir/file1 $testdir/file2 # success, all done
tests/xfs/139.out +6 -2
@@ -3,5 +3,9 @@ Format and mount Create the original files CoW every other block Compare files -673c759fb131ccf3336c4f8c549a497e SCRATCH_MNT/test-139/file1 -dc802351f6717547cbf4c951b294f952 SCRATCH_MNT/test-139/file2 +0 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 62 +* +30000 +0 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 +* +30000
Signature · 1 line
2.9.5
Re: [PATCH V5 06/20] Fix xfs/139 to work with 64k block size
Quoted 16 lines · Chandan Rajendra
For 64k block size, the agsize provided in the test causes mkfs.xfs to fail due to insufficient log space. Hence this commit computes agsize based on block size of the filesystem.
Signed-off-by Chandan Rajendra <[email protected]>--- tests/xfs/139 | 15 +++++++++------ tests/xfs/139.out | 8 ++++++-- 2 files changed, 15 insertions(+), 8 deletions(-)tests/xfs/139 +0
-0@@ -34,17 +34,20 @@ _require_cp_reflink
tests/xfs/139 _require_cp_reflink · line 43
Quoted 10 lines
tests/xfs/139 +6
-1rm -f $seqres.full +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount +blksz=$(_get_file_block_size $SCRATCH_MNT) +_scratch_unmount + echo "Format and mount" -_scratch_mkfs -d agsize=$((32 * 1048576)) > $seqres.full 2>&1 +_scratch_mkfs -d agsize=$((8192 * $blksz)) > $seqres.full 2>&1
This breaks 512 byte and 1k block size filesystems.
$ head -3 139.full Invalid value 8388608 for -d agsize option. Value is too small. Usage: mkfs.xfs /* blocksize */ [-b size=num] $
Minimum AG size is 16MB. There are more changes to other tests in this series that also demonstrate this regression.
Cheers,
Dave.
Signature · 2 lines
Dave Chinner [email protected]
Re: [PATCH V5 06/20] Fix xfs/139 to work with 64k block size
Quoted 30 lines · IST Dave Chinner
Quoted 16 lines · Chandan Rajendra
For 64k block size, the agsize provided in the test causes mkfs.xfs to fail due to insufficient log space. Hence this commit computes agsize based on block size of the filesystem.
Signed-off-by Chandan Rajendra <[email protected]>--- tests/xfs/139 | 15 +++++++++------ tests/xfs/139.out | 8 ++++++-- 2 files changed, 15 insertions(+), 8 deletions(-)tests/xfs/139 +0
-0@@ -34,17 +34,20 @@ _require_cp_reflinktests/xfs/139 _require_cp_reflink · line 43
Quoted 10 lines
tests/xfs/139 +6
-1rm -f $seqres.full +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount +blksz=$(_get_file_block_size $SCRATCH_MNT) +_scratch_unmount + echo "Format and mount" -_scratch_mkfs -d agsize=$((32 * 1048576)) > $seqres.full 2>&1 +_scratch_mkfs -d agsize=$((8192 * $blksz)) > $seqres.full 2>&1This breaks 512 byte and 1k block size filesystems.
Quoted 8 lines
$ head -3 139.full Invalid value 8388608 for -d agsize option. Value is too small. Usage: mkfs.xfs /* blocksize */ [-b size=num] $Minimum AG size is 16MB. There are more changes to other tests in this series that also demonstrate this regression.
Thanks for mentioning this fact about the minimum AG size. I will verify all the tests once again.
Also, for xfs/139, 512 byte block size does not apply since reflink feature requires CRC to be enabled. Nevertheless, I will make sure that mkfs.xfs actually does succeed for other tests where 512 bytes block size is applicable.
Signature · 1 line
chandan
PATCH v5 7/20 Fix xfs/140 to work with 64k block size
In reply to Chandan RajendraFor 64k block size, the agsize provided in the test causes mkfs.xfs to fail due to insufficient log space. Hence this commit computes agsize based on block size of the filesystem.
--- tests/xfs/140 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
tests/xfs/140 +8 -4
@@ -34,17 +34,21 @@ _require_cp_reflink rm -f $seqres.full +_scratch_mkfs >/dev/null 2>&1 +_scratch_mount +blksz=$(_get_file_block_size $SCRATCH_MNT) +_scratch_unmount + echo "Format and mount" -_scratch_mkfs -d agsize=$((32 * 1048576)) > $seqres.full 2>&1 +_scratch_mkfs -d agsize=$((8192 * $blksz)) > $seqres.full 2>&1 _scratch_mount >> $seqres.full 2>&1 testdir=$SCRATCH_MNT/test-$seq mkdir $testdir -blksz=$(_get_block_size $testdir) echo "Create the original files" -sz=$((48 * 1048576)) -nr=$((sz / blksz)) +nr=12288 +sz=$(($nr * $blksz)) _pwrite_byte 0x61 0 $sz $testdir/file1 >> $seqres.full _cp_reflink $testdir/file1 $testdir/file2 >> $seqres.full _pwrite_byte 0x61 0 $sz $testdir/file2.chk >> $seqres.full
Signature · 1 line
2.9.5
PATCH v5 8/20 Fix xfs/190 to work with 64k block size
In reply to Chandan RajendraThis commit describes "file hole" ranges in multiples of block sizes rather than using constants.
--- tests/xfs/190 | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-)
tests/xfs/190 +17 -9
@@ -10,13 +10,6 @@ # # PV 985792 # -#This is the list of holes to punch in the file limited to $filesize -#NOTE holes cannot overlap or this script will fail. -holes="4096:4096 303104:4096 1048576:512 1051648:8192 1065984:8192 1085440:7168" -#filesize in MB -filesize=10 -#Name of file to perform the test on -filename=test-190 seq=`basename $0` seqres=$RESULT_DIR/$seq
@@ -38,9 +31,24 @@ _supported_os Linux _require_scratch _scratch_mkfs_xfs >/dev/null 2>&1 _scratch_mount -fsblocksize=`$XFS_INFO_PROG $SCRATCH_MNT|sed 's/=/ /g'|awk '/^data / { print $3 }'` -dd if=/dev/zero of=$SCRATCH_MNT/$filename bs=1024k count=10 >> $seqres.full 2>&1 +fsblocksize=$(_get_file_block_size $SCRATCH_MNT) + +#This is the list of holes to punch in the file limited to $filesize +#NOTE holes cannot overlap or this script will fail. +holes="$fsblocksize:$fsblocksize \ +$(($fsblocksize * 74)):$fsblocksize \ +$(($fsblocksize * 256)):$(($fsblocksize / 8)) \ +$(echo scale=0\;$fsblocksize \* 256 \+ $fsblocksize \* 3 \/ 4 | bc):$(($fsblocksize * 2)) \ +$(echo scale=0\;$fsblocksize \* 260 \+ $fsblocksize \* 1 \/ 4 | bc):$(($fsblocksize * 2)) \ +$(($fsblocksize * 265)):$(echo scale=0\;$fsblocksize \+ $fsblocksize \* 3 \/ 4 | bc)" + +#filesize +filesize=$(($fsblocksize * 2560)) +#Name of file to perform the test on +filename=test-190 + +$XFS_IO_PROG -f -c "pwrite 0 $(($fsblocksize * 2560))" $SCRATCH_MNT/$filename >> $seqres.full 2>&1 # run DMAPI test using verbose output echo Punching holes in file
Signature · 1 line
2.9.5
PATCH v5 9/20 xfs/299: Fix "Push past soft inode limit" case
In reply to Chandan RajendraThe test sets an inode soft limit of four but only three files are created. This commit creates two more files in order to really push past the soft inode limit.
--- tests/xfs/299 | 2 ++ tests/xfs/299.out | 36 ++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 18 deletions(-)
tests/xfs/299 +2 -0
@@ -139,6 +139,8 @@ _exercise() echo "*** push past the soft inode limit" | tee -a $seqres.full _file_as_id $SCRATCH_MNT/softie1 $id $type 1024 0 _file_as_id $SCRATCH_MNT/softie2 $id $type 1024 0 + _file_as_id $SCRATCH_MNT/softie3 $id $type 1024 0 + _file_as_id $SCRATCH_MNT/softie4 $id $type 1024 0 _qmount xfs_quota -D $tmp.projects -P $tmp.projid -x \ -c "repquota -birnN -$type" $SCRATCH_DEV |
tests/xfs/299.out +18 -18
@@ -16,11 +16,11 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------]
@@ -40,11 +40,11 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------]
@@ -64,11 +64,11 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------]
@@ -96,19 +96,19 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [--------] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** report no quota settings
@@ -120,19 +120,19 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [--------] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** report no quota settings
@@ -144,18 +144,18 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft inode limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 0 100 500 00 [--------] 3 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 0 100 500 00 [--------] 5 4 10 00 [--------] 0 0 0 00 [--------] *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 4 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 16 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** unmount
Signature · 1 line
2.9.5
PATCH v5 10/20 Fix xfs/299 to work with 64k block size
In reply to Chandan RajendraThis commit changes the test to calculate quota limits based on the block size of the underlying filesystem. Also, the sizes of the test files are now made to be a multiple of the filesystem block size.
--- tests/xfs/299 | 27 ++++++++++++++++----------- tests/xfs/299.out | 36 ++++++++++++++++++------------------ 2 files changed, 34 insertions(+), 29 deletions(-)
tests/xfs/299 +16 -11
@@ -41,11 +41,6 @@ _require_xfs_quota _require_xfs_mkfs_crc _require_xfs_crc -bsoft=100 -bhard=500 -isoft=4 -ihard=10 - _filter_report() { tr -s '[:space:]' | \
@@ -58,7 +53,9 @@ _filter_report() if ($ENV{'LARGE_SCRATCH_DEV'}) { $val = $ENV{'NUM_SPACE_FILES'}; } - s/(^\[ROOT\] \S+ \S+ \S+ \S+ \[--------\] )(\S+)/$1@{[$2 - $val]}/g' + s/(^\[ROOT\] \S+ \S+ \S+ \S+ \[--------\] )(\S+)/$1@{[$2 - $val]}/g' | + perl -npe ' + s|^(.*?) (\d+) (\d+) (\d+)|$1 @{[$2 * 1024 /'$bsize']} @{[$3 * 1024 /'$bsize']} @{[$4 * 1024 /'$bsize']}|' } # The actual point at which limit enforcement takes place for the
@@ -73,9 +70,10 @@ _filter_and_check_blks() if (/^\#'$id'\s+(\d+)/ && '$enforce') { $maximum = '$bhard'; $minimum = '$bhard' * 85/100; - if (($1 < $minimum || $1 > $maximum) && '$noextsz') { + $used = $1 * 1024; + if (($used < $minimum || $used > $maximum) && '$noextsz') { printf(" URK %d: %d is out of range! [%d,%d]\n", - '$id', $1, $minimum, $maximum); + '$id', $used, $minimum, $maximum); } s/^(\#'$id'\s+)(\d+)/\1 =OK=/g; }
@@ -128,7 +126,7 @@ _exercise() echo "ls -l $SCRATCH_MNT" >>$seqres.full ls -l $SCRATCH_MNT >>$seqres.full xfs_quota -D $tmp.projects -P $tmp.projid -x \ - -c "limit -$type bsoft=${bsoft}k bhard=${bhard}k $id" \ + -c "limit -$type bsoft=${bsoft} bhard=${bhard} $id" \ -c "limit -$type isoft=$isoft ihard=$ihard $id" \ $SCRATCH_DEV xfs_quota -D $tmp.projects -P $tmp.projid -x \
@@ -148,7 +146,7 @@ _exercise() echo echo "*** push past the soft block limit" | tee -a $seqres.full - _file_as_id $SCRATCH_MNT/softie $id $type 1024 140 + _file_as_id $SCRATCH_MNT/softie $id $type $bsize 200 _qmount xfs_quota -D $tmp.projects -P $tmp.projid -x \ -c "repquota -birnN -$type" $SCRATCH_DEV |
@@ -169,7 +167,7 @@ _exercise() echo # Note: for quota accounting (not enforcement), EDQUOT is not expected echo "*** push past the hard block limit (expect EDQUOT)" | tee -a $seqres.full - _file_as_id $SCRATCH_MNT/softie $id $type 1024 540 + _file_as_id $SCRATCH_MNT/softie $id $type $bsize 600 echo "ls -l $SCRATCH_MNT" >>$seqres.full ls -l $SCRATCH_MNT >>$seqres.full _qmount
@@ -204,6 +202,13 @@ echo "*** user, group, and project" _qmount_option "uquota,gquota,pquota" _qmount +bsize=$(_get_file_block_size $SCRATCH_MNT) + +bsoft=$(( 100 * $bsize )) +bhard=$(( 500 * $bsize )) +isoft=4 +ihard=10 + # non-root users need to be able to write to this filesystem chmod 777 $SCRATCH_MNT
tests/xfs/299.out +18 -18
@@ -20,15 +20,15 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 9 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [7 days] 9 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] =OK= 100 500 00 [7 days] 9 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] =OK= 100 500 0 [7 days] 9 4 10 00 [7 days] 0 0 0 00 [--------] *** report no quota settings
@@ -44,15 +44,15 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] =OK= 100 500 00 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] =OK= 100 500 0 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] *** report no quota settings
@@ -68,15 +68,15 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [7 days] 6 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] =OK= 100 500 00 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] +[NAME] =OK= 100 500 0 [7 days] 10 4 10 00 [7 days] 0 0 0 00 [--------] *** unmount meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
@@ -100,15 +100,15 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 600 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** report no quota settings
@@ -124,15 +124,15 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 600 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** report no quota settings
@@ -148,14 +148,14 @@ realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX *** push past the soft block limit [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [--------] 6 4 10 00 [--------] 0 0 0 00 [--------] *** push past the hard inode limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 140 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 200 100 500 00 [--------] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** push past the hard block limit (expect EDQUOT) [ROOT] 0 0 0 00 [--------] 3 0 0 00 [--------] 0 0 0 00 [--------] -[NAME] 540 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] +[NAME] 600 100 500 00 [--none--] 18 4 10 00 [--none--] 0 0 0 00 [--------] *** unmount
Signature · 1 line
2.9.5
PATCH v5 11/20 xfs/325: Inject free_extent error after CoW operation
In reply to Chandan RajendraOn a 64k blocksized filesystem, when the test CoWs the file2's offset range [10 * 64k, 19 * 64k], the call to xfs_bmapi_reserve_delalloc() allocates 32 64k blocks. This is because XFS_DEFAULT_COWEXTSZ_HINT has the value of 32 and xfs_get_cowextsz_hint() uses this to compute the extent alignment. This leads to xfs_bmapi_reserve_delalloc() to reserve space corresponding to the file range [0, 32 * 64k] in the inode's cow fork area. On completion of write I/O corresponding to file2's range [10 * 64k, 19 * 64k], xfs_end_io() moves 10 out of the originally allocated 32 64k blocks to the data fork area. The remaining 22 64k blocks linger on in cow fork area of the inode.
Later, when servicing the exit() syscall for the xfs_io process, xfs_free_eofblocks() ends up invoking xfs_reflink_cancel_cow_blocks() since i_delayed_blks has the value 22. xfs_reflink_cancel_cow_blocks() indirectly invokes __xfs_free_extent() which returns EIO since XFS_ERRTAG_FREE_EXTENT has been set. This leads to the filesystem to be shutdown. The "rm" command invoked later ends up returning an error and hence the test fails. The test actually requires that the filesystem gets shutdown when executing the "rm" command.
To fix the problem, this commit injects the free_extent error after we CoW file2's [10 * 64k, 19 * 64k] range.
--- tests/xfs/325 | 5 +++-- tests/xfs/325.out | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-)
tests/xfs/325 +3 -2
@@ -54,11 +54,12 @@ echo "Check files" md5sum $SCRATCH_MNT/file1 | _filter_scratch md5sum $SCRATCH_MNT/file2 | _filter_scratch +echo "CoW a few blocks" +$XFS_IO_PROG -c "pwrite -W -S 0x67 $((10 * blksz)) $((10 * blksz))" $SCRATCH_MNT/file2 >> $seqres.full + echo "Inject error" _scratch_inject_error "free_extent" -echo "CoW a few blocks" -$XFS_IO_PROG -c "pwrite -W -S 0x67 $((10 * blksz)) $((10 * blksz))" $SCRATCH_MNT/file2 >> $seqres.full rm $SCRATCH_MNT/file1 sync
tests/xfs/325.out +1 -1
@@ -4,8 +4,8 @@ Create files Check files d5a0ed0305c8df4180cb2bf975ecffe8 SCRATCH_MNT/file1 d5a0ed0305c8df4180cb2bf975ecffe8 SCRATCH_MNT/file2 -Inject error CoW a few blocks +Inject error FS should be shut down, touch will fail touch: cannot touch 'SCRATCH_MNT/badfs': Input/output error Remount to replay log
Signature · 1 line
2.9.5
PATCH v5 12/20 Fix generic/102 to work with 64k block size
In reply to Chandan RajendraWith 64k block size, mkfs.xfs fails with the following message when the filesystem size is 512MiB in size,
"log size 2037 blocks too small, minimum size is 2473 blocks"
Hence this commit increases the test filesystem size to 1GiB. Also, the size of the test file is increased to 800MiB which is ~80% of the test filesystem size. This is in proportion to the 400MiB test file used with the original 512MiB test filesystem.
--- tests/generic/102 | 4 ++-- tests/generic/102.out | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-)
tests/generic/102 +2 -2
@@ -31,14 +31,14 @@ _require_scratch rm -f $seqres.full -dev_size=$((512 * 1024 * 1024)) # 512MB filesystem +dev_size=$((1024 * 1024 * 1024)) # 1GB filesystem _scratch_mkfs_sized $dev_size >>$seqres.full 2>&1 _scratch_mount for ((i = 0; i < 10; i++)); do echo "loop $i" >>$seqres.full - $XFS_IO_PROG -f -c "pwrite -b 1m 0 400m" "$SCRATCH_MNT"/file | \ + $XFS_IO_PROG -f -c "pwrite -b 1m 0 800m" "$SCRATCH_MNT"/file | \ _filter_xfs_io | _filter_scratch rm -f "$SCRATCH_MNT"/file
tests/generic/102.out +10 -10
@@ -1,21 +1,21 @@ QA output created by 102 -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) -wrote 419430400/419430400 bytes at offset 0 +wrote 838860800/838860800 bytes at offset 0 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Signature · 1 line
2.9.5
PATCH v5 13/20 Fix generic/172 to work with 64k block size
In reply to Chandan RajendraFor 64k block size, With 256MiB as the XFS filesystem size and 168 MiB as the size of the clone source file, we end up hitting ENOSPC when cloning the source file. This happens due to lack of space for housing the corresponding metadata. This scenario also occurs when using a 512MiB XFS filesystem and 300MiB clone source file.
Hence this commit increases the size of the test filesystem to 1 GiB and the size of the clone source file to 768MiB.
--- tests/generic/172 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tests/generic/172 +2 -2
@@ -47,8 +47,8 @@ echo "Reformat with appropriate size" blksz="$(_get_block_size $testdir)" umount $SCRATCH_MNT -file_size=$((168 * 1024 * 1024)) -fs_size=$((256 * 1024 * 1024)) +file_size=$((768 * 1024 * 1024)) +fs_size=$((1024 * 1024 * 1024)) _scratch_mkfs_sized $fs_size >> $seqres.full 2>&1 _scratch_mount >> $seqres.full 2>&1 rm -rf $testdir
Signature · 1 line
2.9.5
PATCH v5 14/20 Filter fiemap output by FS block size
In reply to Chandan RajendraWhen testing FS instances of block size other than 4k, the output of fiemap command will not match those in *.out files. This commit adds an optional "block size" argument to _filter_fiemap() which prints fiemap output in units of block size.
--- common/punch | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
common/punch +14 -5
@@ -165,7 +165,11 @@ _test_punch() { _coalesce_extents() { - awk -F: ' + block_size=$1 + + [[ -z $block_size ]] && block_size=512 + + awk -v block_size="$block_size" -F: ' { range = $2; type = $3;
@@ -176,19 +180,24 @@ _coalesce_extents() if (type != prev_type) { if (prev_type != "") - printf("%u]:%s\n", low - 1, prev_type); - printf("%u: [%u..", out_count++, low); + printf("%u]:%s\n", (low * 512 / block_size) - 1, + prev_type); + printf("%u: [%u..", out_count++, + (low * 512) / block_size); prev_type = type; } } END { if (prev_type != "") - printf("%u]:%s\n", high, prev_type); + printf("%u]:%s\n", ((high + 1) * 512 / block_size) - 1, + prev_type); }' } _filter_fiemap() { + block_size=$1 + $AWK_PROG ' $3 ~ /hole/ { print $1, $2, $3;
@@ -201,7 +210,7 @@ _filter_fiemap() $5 ~ /0x[[:xdigit:]]+/ { print $1, $2, "data"; }' | - _coalesce_extents + _coalesce_extents $block_size } _filter_fiemap_flags()
Signature · 1 line
2.9.5
PATCH v5 15/20 Fix generic/177 to work with 64k block size
In reply to Chandan RajendraThis commit changes the test to work on file offsets that are aligned with the block size of the underlying filesystem.
--- tests/generic/177 | 20 +++++++++++--------- tests/generic/177.out | 23 +++++++++++++++-------- 2 files changed, 26 insertions(+), 17 deletions(-)
tests/generic/177 +11 -9
@@ -45,44 +45,46 @@ _require_metadata_journaling $SCRATCH_DEV _init_flakey _mount_flakey +BLOCK_SIZE=$(_get_file_block_size $SCRATCH_MNT) + # Create out test file with some data and then fsync it. # We do the fsync only to make sure the last fsync we do in this test triggers # the fast code path of btrfs' fsync implementation, a condition necessary to # trigger the bug btrfs had. -$XFS_IO_PROG -f -c "pwrite -S 0xaa 0K 128K" \ +$XFS_IO_PROG -f -c "pwrite -S 0xaa 0K $(($BLOCK_SIZE * 32))" \ -c "fsync" \ - $SCRATCH_MNT/foobar | _filter_xfs_io + $SCRATCH_MNT/foobar | _filter_xfs_io_blocks_modified # Now punch a hole against the range [96K, 128K[. -$XFS_IO_PROG -c "fpunch 96K 32K" $SCRATCH_MNT/foobar +$XFS_IO_PROG -c "fpunch $(($BLOCK_SIZE * 24)) $(($BLOCK_SIZE * 8))" $SCRATCH_MNT/foobar # Punch another hole against a range that overlaps the previous range and ends # beyond eof. -$XFS_IO_PROG -c "fpunch 64K 128K" $SCRATCH_MNT/foobar +$XFS_IO_PROG -c "fpunch $(($BLOCK_SIZE * 16)) $(($BLOCK_SIZE * 32))" $SCRATCH_MNT/foobar # Punch another hole against a range that overlaps the first range ([96K, 128K[) # and ends at eof. -$XFS_IO_PROG -c "fpunch 32K 96K" $SCRATCH_MNT/foobar +$XFS_IO_PROG -c "fpunch $(($BLOCK_SIZE * 8)) $(($BLOCK_SIZE * 24))" $SCRATCH_MNT/foobar # Fsync our file. We want to verify that, after a power failure and mounting the # filesystem again, the file content reflects all the hole punch operations. $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foobar echo "File digest before power failure:" -md5sum $SCRATCH_MNT/foobar | _filter_scratch +od -t x1 $SCRATCH_MNT/foobar | _filter_od echo "Fiemap before power failure:" -$XFS_IO_PROG -c "fiemap -v" $SCRATCH_MNT/foobar | _filter_fiemap +$XFS_IO_PROG -c "fiemap -v" $SCRATCH_MNT/foobar | _filter_fiemap $BLOCK_SIZE _flakey_drop_and_remount echo "File digest after log replay:" # Must match the same digest we got before the power failure. -md5sum $SCRATCH_MNT/foobar | _filter_scratch +od -t x1 $SCRATCH_MNT/foobar | _filter_od echo "Fiemap after log replay:" # Must match the same extent listing we got before the power failure. -$XFS_IO_PROG -c "fiemap -v" $SCRATCH_MNT/foobar | _filter_fiemap +$XFS_IO_PROG -c "fiemap -v" $SCRATCH_MNT/foobar | _filter_fiemap $BLOCK_SIZE _unmount_flakey
tests/generic/177.out +15 -8
@@ -1,13 +1,20 @@ QA output created by 177 -wrote 131072/131072 bytes at offset 0 -XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +Blocks modified: [0 - 31] File digest before power failure: -d26bbb9a8396a9c0dd76423471b72b15 SCRATCH_MNT/foobar +0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa +* +10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +* +40 Fiemap before power failure: -0: [0..63]: data -1: [64..255]: hole +0: [0..7]: data +1: [8..31]: hole File digest after log replay: -d26bbb9a8396a9c0dd76423471b72b15 SCRATCH_MNT/foobar +0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa +* +10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +* +40 Fiemap after log replay: -0: [0..63]: data -1: [64..255]: hole +0: [0..7]: data +1: [8..31]: hole
Signature · 1 line
2.9.5
PATCH v5 16/20 Fix generic/230 to work with 64k block size
In reply to Chandan RajendraThis commit changes the test to work on file offsets that are aligned with the block size of the underlying filesystem.
--- tests/generic/230 | 23 +++++++++++++---------- tests/generic/230.out | 16 ++++++++-------- 2 files changed, 21 insertions(+), 18 deletions(-)
tests/generic/230 +13 -10
@@ -42,27 +42,27 @@ test_enforcement() echo "### some buffered IO (type=$type)" echo "--- initiating IO..." >>$seqres.full # Firstly fit below block soft limit - echo "Write 900k..." - su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 900k' -c fsync \ + echo "Write 225 blocks..." + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 $((225 * $BLOCK_SIZE))' -c fsync \ $SCRATCH_MNT/file1" 2>&1 >>$seqres.full | \ _filter_xfs_io_error | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Secondly overcome block soft limit - echo "Rewrite 1001k..." - su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 1001k' -c fsync \ + echo "Rewrite 250 blocks plus 1 byte..." + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 $((250 * $BLOCK_SIZE + 1))' -c fsync \ $SCRATCH_MNT/file1" 2>&1 >>$seqres.full | \ _filter_xfs_io_error | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Now try to overcome block hardlimit - echo "Write 1000k..." - su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 1000k' -c fsync \ + echo "Write 250 blocks..." + su $qa_user -c "$XFS_IO_PROG -c 'pwrite 0 $((250 * $BLOCK_SIZE))' -c fsync \ $SCRATCH_MNT/file2" 2>&1 >>$seqres.full | \ _filter_xfs_io_error | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 # Now sleep for grace time and check that softlimit got enforced sleep $((grace+1)) - echo "Write 4096..." - su $qa_user -c "$XFS_IO_PROG -c 'truncate 0' -c 'pwrite 0 4096' \ + echo "Write 1 block..." + su $qa_user -c "$XFS_IO_PROG -c 'truncate 0' -c 'pwrite 0 $BLOCK_SIZE' \ $SCRATCH_MNT/file2" 2>&1 >>$seqres.full | \ _filter_xfs_io_error | tee -a $seqres.full repquota -$type $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1
@@ -101,11 +101,14 @@ grace=2 _scratch_mkfs >> $seqres.full 2>&1 _scratch_mount "-o usrquota,grpquota" +BLOCK_SIZE=$(_get_file_block_size $SCRATCH_MNT) quotacheck -u -g $SCRATCH_MNT 2>/dev/null quotaon $SCRATCH_MNT 2>/dev/null -setquota -u $qa_user 1000 2000 3 5 $SCRATCH_MNT +setquota -u $qa_user $((250 * $BLOCK_SIZE / 1024)) \ + $((500 * $BLOCK_SIZE / 1024)) 3 5 $SCRATCH_MNT setquota -u -t $grace $grace $SCRATCH_MNT -setquota -g $qa_user 1000 2000 3 5 $SCRATCH_MNT +setquota -g $qa_user $((250 * $BLOCK_SIZE / 1024)) \ + $((500 * $BLOCK_SIZE / 1024)) 3 5 $SCRATCH_MNT setquota -g -t $grace $grace $SCRATCH_MNT _scratch_unmount
tests/generic/230.out +8 -8
@@ -4,11 +4,11 @@ QA output created by 230 ### create files, setting up ownership (type=u) ### some buffered IO (type=u) -Write 900k... -Rewrite 1001k... -Write 1000k... +Write 225 blocks... +Rewrite 250 blocks plus 1 byte... +Write 250 blocks... pwrite: Disk quota exceeded -Write 4096... +Write 1 block... pwrite: Disk quota exceeded Touch 3+4 Touch 5+6
@@ -20,11 +20,11 @@ touch: cannot touch 'SCRATCH_MNT/file5': Disk quota exceeded ### create files, setting up ownership (type=g) ### some buffered IO (type=g) -Write 900k... -Rewrite 1001k... -Write 1000k... +Write 225 blocks... +Rewrite 250 blocks plus 1 byte... +Write 250 blocks... pwrite: Disk quota exceeded -Write 4096... +Write 1 block... pwrite: Disk quota exceeded Touch 3+4 Touch 5+6
Signature · 1 line
2.9.5
PATCH v5 17/20 Fix generic/235 to work with 64k block size
In reply to Chandan RajendraWith 64k blocksized filesystem, this test fails since a single 8k write will actually end up consuming 64k. Hence this commit writes 64k data into the test file.
--- tests/generic/235 | 2 +- tests/generic/235.out | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
tests/generic/235 +1 -1
@@ -55,7 +55,7 @@ _try_scratch_mount "-o remount,ro" 2>&1 | tee -a $seqres.full | _filter_scratch touch $SCRATCH_MNT/failed 2>&1 | tee -a $seqres.full | _filter_scratch _try_scratch_mount "-o remount,rw" 2>&1 | tee -a $seqres.full | _filter_scratch -$XFS_IO_PROG -c 'pwrite 0 8k' -c 'fsync' \ +$XFS_IO_PROG -c 'pwrite 0 64k' -c 'fsync' \ $SCRATCH_MNT/testfile >>$seqres.full 2>&1 do_repquota
tests/generic/235.out +2 -2
@@ -17,10 +17,10 @@ Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- -fsgqa -- 8 0 0 1 0 0 +fsgqa -- 64 0 0 1 0 0 *** Report for group quotas on device SCRATCH_DEV Block grace time: 7days; Inode grace time: 7days Block limits File limits Group used soft hard grace used soft hard grace ---------------------------------------------------------------------- -fsgqa -- 8 0 0 1 0 0 +fsgqa -- 64 0 0 1 0 0
Signature · 1 line
2.9.5
PATCH v5 18/20 Fix generic/459 to work with 64k block size
In reply to Chandan RajendraWith 64k block size, 200MiB disk space is not sufficient to create an XFS filesystem. Hence this commit increases the size of the overprovisioned dm-thin device to 300MiB. The commit also increases the other associated disk sizes (original physical size and new physical size) appropriately.
--- tests/generic/459 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
tests/generic/459 +7 -7
@@ -59,14 +59,14 @@ vgname=vg_$seq lvname=lv_$seq poolname=pool_$seq snapname=snap_$seq -origpsize=100 -virtsize=200 -newpsize=200 +origpsize=200 +virtsize=300 +newpsize=300 # Ensure we have enough disk space -_scratch_mkfs_sized $((250 * 1024 * 1024)) >>$seqres.full 2>&1 +_scratch_mkfs_sized $((350 * 1024 * 1024)) >>$seqres.full 2>&1 -# Create a 100MB dm-thin POOL +# Create a 200MB dm-thin POOL $LVM_PROG pvcreate -f $SCRATCH_DEV >>$seqres.full 2>&1 $LVM_PROG vgcreate -f $vgname $SCRATCH_DEV >>$seqres.full 2>&1
@@ -74,7 +74,7 @@ $LVM_PROG lvcreate --thinpool $poolname --errorwhenfull y \ --zero n -L $origpsize \ --poolmetadatasize 4M $vgname >>$seqres.full 2>&1 -# Create a overprovisioned 200MB dm-thin virt. device +# Create a overprovisioned 300MB dm-thin virt. device $LVM_PROG lvcreate --virtualsize $virtsize \ -T $vgname/$poolname \ -n $lvname >>$seqres.full 2>&1
@@ -92,7 +92,7 @@ _mount /dev/mapper/$vgname-$snapname $SCRATCH_MNT # Consume all space available in the volume and freeze to ensure everything # required to make the fs consistent is flushed to disk. -$XFS_IO_PROG -f -d -c 'pwrite -b 1m 0 120m' $SCRATCH_MNT/f1 >>$seqres.full 2>&1 +$XFS_IO_PROG -f -d -c 'pwrite -b 1m 0 220m' $SCRATCH_MNT/f1 >>$seqres.full 2>&1 # In XFS, this freeze will never complete until the dm-thin POOL device is # extended. It is expected, and is only used so xfsaild is triggered to
Signature · 1 line
2.9.5
PATCH v5 19/20 Fix generic/018 to work with 64k block size
In reply to Chandan RajendraThis commit replaces the hard coded bsize variable with the block size obtained from the underlying filesystem.
--- tests/generic/018 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tests/generic/018 +1 -1
@@ -42,7 +42,7 @@ fragfile=$SCRATCH_MNT/fragfile.$$ rm -f $fragfile # Craft some fragmented files, defrag them, check the result. -bsize=4096 +bsize=$(_get_file_block_size $SCRATCH_MNT) echo "zero-length file:" | tee -a $seqres.full touch $fragfile
Signature · 1 line
2.9.5
PATCH v5 20/20 Fix generic/108 to work with 64k block size
In reply to Chandan RajendraThis commit increases the size of the scsi debug device to 300MiB to accommodate a 275MiB sized XFS filesystem with 64k block size. mkfs.xfs fails to create a 64k block sized filesystem on devices with capacity less than 275MiB.
--- tests/generic/108 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tests/generic/108 +2 -2
@@ -48,7 +48,7 @@ vgname=vg_$seq rm -f $seqres.full # _get_scsi_debug_dev returns a scsi debug device with 128M in size by default -SCSI_DEBUG_DEV=`_get_scsi_debug_dev` +SCSI_DEBUG_DEV=`_get_scsi_debug_dev 512 512 0 300` if [ "$SCSI_DEBUG_DEV" == "/dev/" ]; then _fail "Failed to initialize scsi debug device" fi
@@ -59,7 +59,7 @@ $LVM_PROG pvcreate -f $SCSI_DEBUG_DEV $SCRATCH_DEV >>$seqres.full 2>&1 $LVM_PROG vgcreate -f $vgname $SCSI_DEBUG_DEV $SCRATCH_DEV >>$seqres.full 2>&1 # We use yes pipe instead of 'lvcreate --yes' because old version of lvm # (like 2.02.95 in RHEL6) don't support --yes option -yes | $LVM_PROG lvcreate -i 2 -I 4m -L 100m -n $lvname $vgname \ +yes | $LVM_PROG lvcreate -i 2 -I 4m -L 275m -n $lvname $vgname \ >>$seqres.full 2>&1 # wait for lv creation to fully complete $UDEV_SETTLE_PROG >>$seqres.full 2>&1
Signature · 1 line
2.9.5