Message ID | efd1594eeec7b893c47865ce5a94c25dc94dac28.1623651783.git.riteshh@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | 64K blocksize related fixes | expand |
On Mon, Jun 14, 2021 at 11:58:09AM +0530, Ritesh Harjani wrote: > This test fails with blocksize 64k since the test assumes 4k blocksize > in fcollapse param. This patch fixes that and also tests for 64k > blocksize. > > Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> > --- > tests/generic/031 | 37 ++++++++++++++++++---- > tests/generic/031.out.64k | 19 +++++++++++ > tests/generic/{031.out => 031.out.default} | 0 > 3 files changed, 49 insertions(+), 7 deletions(-) > create mode 100644 tests/generic/031.out.64k > rename tests/generic/{031.out => 031.out.default} (100%) > > diff --git a/tests/generic/031 b/tests/generic/031 > index db84031b..40cb23af 100755 > --- a/tests/generic/031 > +++ b/tests/generic/031 > @@ -8,6 +8,7 @@ > # correctly written and aren't left behind causing invalidation or data > # corruption issues. > # > +seqfull=$0 > seq=`basename $0` > seqres=$RESULT_DIR/$seq > echo "QA output created by $seq" > @@ -39,12 +40,35 @@ testfile=$SCRATCH_MNT/testfile > _scratch_mkfs > /dev/null 2>&1 > _scratch_mount > > -$XFS_IO_PROG -f \ > - -c "pwrite 185332 55756" \ > - -c "fcollapse 28672 40960" \ > - -c "pwrite 133228 63394" \ > - -c "fcollapse 0 4096" \ > -$testfile | _filter_xfs_io > +# fcollapse need offset and len to be multiple of blocksize for filesystems > +# hence make this test work with 64k blocksize as well. > +blksz=$(_get_block_size $SCRATCH_MNT) > + > +rm -f $seqfull.out > +if [ "$blksz" -eq 65536 ]; then > + ln -s $seq.out.64k $seqfull.out > +else > + ln -s $seq.out.default $seqfull.out > +fi > + > +if [[ $blksz -le 4096 ]]; then > + $XFS_IO_PROG -f \ > + -c "pwrite 185332 55756" \ > + -c "fcollapse 28672 40960" \ > + -c "pwrite 133228 63394" \ > + -c "fcollapse 0 4096" \ > + $testfile | _filter_xfs_io > +elif [[ $blksz -eq 65536 ]]; then > + fact=$blksz/4096 What if the blocksize is 32k? --D > + $XFS_IO_PROG -f \ > + -c "pwrite $((185332*fact + 12)) $((55756*fact + 12))" \ > + -c "fcollapse $((28672 * fact)) $((40960 * fact))" \ > + -c "pwrite $((133228 * fact + 12)) $((63394 * fact + 12))" \ > + -c "fcollapse 0 $((4096 * fact))" \ > + $testfile | _filter_xfs_io > +else > + _notrun "blocksize not supported" > +fi > > echo "==== Pre-Remount ===" > hexdump -C $testfile > @@ -54,4 +78,3 @@ hexdump -C $testfile > > status=0 > exit > - > diff --git a/tests/generic/031.out.64k b/tests/generic/031.out.64k > new file mode 100644 > index 00000000..7dfcfe41 > --- /dev/null > +++ b/tests/generic/031.out.64k > @@ -0,0 +1,19 @@ > +QA output created by 031 > +wrote 892108/892108 bytes at offset 2965324 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +wrote 1014316/1014316 bytes at offset 2131660 > +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) > +==== Pre-Remount === > +00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| > +* > +001f86c0 00 00 00 00 00 00 00 00 00 00 00 00 cd cd cd cd |................| > +001f86d0 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd |................| > +* > +002fdc18 > +==== Post-Remount == > +00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| > +* > +001f86c0 00 00 00 00 00 00 00 00 00 00 00 00 cd cd cd cd |................| > +001f86d0 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd |................| > +* > +002fdc18 > diff --git a/tests/generic/031.out b/tests/generic/031.out.default > similarity index 100% > rename from tests/generic/031.out > rename to tests/generic/031.out.default > -- > 2.31.1 >
On Wed, Jun 30, 2021 at 08:50:01AM -0700, Darrick J. Wong wrote: > > +# fcollapse need offset and len to be multiple of blocksize for filesystems > > +# hence make this test work with 64k blocksize as well. > ... > > What if the blocksize is 32k? ... or 8k? or 16k? (which might be more likely) How bout if we change the offsets and lengths in the test so they are all multiples of 64k, and adjusting 31.out appropriately? That will allow the test to work for block sizes up to 64k without needing to having a special case for 031.out.64k. I don't know of architectures with a page size > 64k (yet), so this should hold us for a while. - Ted
On 21/06/30 01:18PM, Theodore Ts'o wrote: > On Wed, Jun 30, 2021 at 08:50:01AM -0700, Darrick J. Wong wrote: > > > +# fcollapse need offset and len to be multiple of blocksize for filesystems > > > +# hence make this test work with 64k blocksize as well. > > ... > > > > What if the blocksize is 32k? > > ... or 8k? or 16k? (which might be more likely) > > How bout if we change the offsets and lengths in the test so they are > all multiples of 64k, and adjusting 31.out appropriately? That will > allow the test to work for block sizes up to 64k without needing to > having a special case for 031.out.64k. > > I don't know of architectures with a page size > 64k (yet), so this > should hold us for a while. > yes, so I already had done the changes in such a way that we can adapt to any blocksize. I will make the changes such that we take fact=65536/4096 by default. Then this should cover all the cases for all blocksizes and we don't have to change 031.out file for different blocksizes. And the test tries to test non-aligned writes, but since I am adding some additional unaligned bytes and also I have kept the layout of the writes same as before, so I think the test should still cover the regression it is meant for. fact=65536/4096 $XFS_IO_PROG -f \ -c "pwrite $((185332*fact + 12)) $((55756*fact + 12))" \ -c "fcollapse $((28672 * fact)) $((40960 * fact))" \ -c "pwrite $((133228 * fact + 12)) $((63394 * fact + 12))" \ -c "fcollapse 0 $((4096 * fact))" \ $testfile | _filter_xfs_io -ritesh
diff --git a/tests/generic/031 b/tests/generic/031 index db84031b..40cb23af 100755 --- a/tests/generic/031 +++ b/tests/generic/031 @@ -8,6 +8,7 @@ # correctly written and aren't left behind causing invalidation or data # corruption issues. # +seqfull=$0 seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" @@ -39,12 +40,35 @@ testfile=$SCRATCH_MNT/testfile _scratch_mkfs > /dev/null 2>&1 _scratch_mount -$XFS_IO_PROG -f \ - -c "pwrite 185332 55756" \ - -c "fcollapse 28672 40960" \ - -c "pwrite 133228 63394" \ - -c "fcollapse 0 4096" \ -$testfile | _filter_xfs_io +# fcollapse need offset and len to be multiple of blocksize for filesystems +# hence make this test work with 64k blocksize as well. +blksz=$(_get_block_size $SCRATCH_MNT) + +rm -f $seqfull.out +if [ "$blksz" -eq 65536 ]; then + ln -s $seq.out.64k $seqfull.out +else + ln -s $seq.out.default $seqfull.out +fi + +if [[ $blksz -le 4096 ]]; then + $XFS_IO_PROG -f \ + -c "pwrite 185332 55756" \ + -c "fcollapse 28672 40960" \ + -c "pwrite 133228 63394" \ + -c "fcollapse 0 4096" \ + $testfile | _filter_xfs_io +elif [[ $blksz -eq 65536 ]]; then + fact=$blksz/4096 + $XFS_IO_PROG -f \ + -c "pwrite $((185332*fact + 12)) $((55756*fact + 12))" \ + -c "fcollapse $((28672 * fact)) $((40960 * fact))" \ + -c "pwrite $((133228 * fact + 12)) $((63394 * fact + 12))" \ + -c "fcollapse 0 $((4096 * fact))" \ + $testfile | _filter_xfs_io +else + _notrun "blocksize not supported" +fi echo "==== Pre-Remount ===" hexdump -C $testfile @@ -54,4 +78,3 @@ hexdump -C $testfile status=0 exit - diff --git a/tests/generic/031.out.64k b/tests/generic/031.out.64k new file mode 100644 index 00000000..7dfcfe41 --- /dev/null +++ b/tests/generic/031.out.64k @@ -0,0 +1,19 @@ +QA output created by 031 +wrote 892108/892108 bytes at offset 2965324 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1014316/1014316 bytes at offset 2131660 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +==== Pre-Remount === +00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +* +001f86c0 00 00 00 00 00 00 00 00 00 00 00 00 cd cd cd cd |................| +001f86d0 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd |................| +* +002fdc18 +==== Post-Remount == +00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| +* +001f86c0 00 00 00 00 00 00 00 00 00 00 00 00 cd cd cd cd |................| +001f86d0 cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd cd |................| +* +002fdc18 diff --git a/tests/generic/031.out b/tests/generic/031.out.default similarity index 100% rename from tests/generic/031.out rename to tests/generic/031.out.default
This test fails with blocksize 64k since the test assumes 4k blocksize in fcollapse param. This patch fixes that and also tests for 64k blocksize. Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> --- tests/generic/031 | 37 ++++++++++++++++++---- tests/generic/031.out.64k | 19 +++++++++++ tests/generic/{031.out => 031.out.default} | 0 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 tests/generic/031.out.64k rename tests/generic/{031.out => 031.out.default} (100%)