On Tue, Aug 13, 2024 at 09:35:04AM +0200, Christoph Hellwig wrote: > Use the min_dio_alignment C tool to check the minimum alignment. > This allows using the values obtained from statx instead of just guessing > based on the sector size and page size. > > For tests using the scratch device this sometimes required moving code > around a bit to ensure the scratch device is actually mounted before > querying the alignment. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Looks good, Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --D > --- > common/rc | 15 --------------- > tests/generic/091 | 2 +- > tests/generic/095 | 7 ++++--- > tests/generic/114 | 2 +- > tests/generic/240 | 2 +- > tests/generic/252 | 2 +- > tests/generic/263 | 2 +- > tests/generic/329 | 2 +- > tests/generic/330 | 2 +- > tests/generic/450 | 2 +- > tests/generic/465 | 2 +- > tests/generic/538 | 2 +- > tests/generic/551 | 2 +- > tests/generic/591 | 2 +- > tests/xfs/194 | 11 ++++++----- > tests/xfs/201 | 47 ++++++++++++++++++++++++----------------------- > tests/xfs/237 | 2 +- > tests/xfs/239 | 2 +- > tests/xfs/556 | 2 +- > 19 files changed, 49 insertions(+), 61 deletions(-) > > diff --git a/common/rc b/common/rc > index afc33bbc2..449ac9fbf 100644 > --- a/common/rc > +++ b/common/rc > @@ -4296,21 +4296,6 @@ _scale_fsstress_args() > printf '%s\n' "$args" > } > > -# > -# Return the logical block size if running on a block device, > -# else substitute the page size. > -# > -_min_dio_alignment() > -{ > - local dev=$1 > - > - if [ -b "$dev" ]; then > - blockdev --getss $dev > - else > - $here/src/feature -s > - fi > -} > - > run_check() > { > echo "# $@" >> $seqres.full 2>&1 > diff --git a/tests/generic/091 b/tests/generic/091 > index 8f7c13da8..5cdf04890 100755 > --- a/tests/generic/091 > +++ b/tests/generic/091 > @@ -16,7 +16,7 @@ _require_test > _require_odirect > > psize=`$here/src/feature -s` > -bsize=`_min_dio_alignment $TEST_DEV` > +bsize=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > # fsx usage: > # > diff --git a/tests/generic/095 b/tests/generic/095 > index 7a0adf880..47e3b1e61 100755 > --- a/tests/generic/095 > +++ b/tests/generic/095 > @@ -16,12 +16,15 @@ _require_scratch > _require_odirect > _require_aio > > +_scratch_mkfs >>$seqres.full 2>&1 > +_scratch_mount > + > iodepth=$((16 * LOAD_FACTOR)) > iodepth_batch=$((8 * LOAD_FACTOR)) > numjobs=$((5 * LOAD_FACTOR)) > fio_config=$tmp.fio > fio_out=$tmp.fio.out > -blksz=$(_min_dio_alignment $SCRATCH_DEV) > +blksz=`$here/src/min_dio_alignment $SCRATCH_MNT $SCRATCH_DEV` > cat >$fio_config <<EOF > [global] > bs=8k > @@ -82,8 +85,6 @@ EOF > echo 'bs=$pagesize' >> $fio_config > > _require_fio $fio_config > -_scratch_mkfs >>$seqres.full 2>&1 > -_scratch_mount > > # There's a known EIO failure to report collisions between directio and buffered > # writes to userspace, refer to upstream linux 5a9d929d6e13. So ignore EIO error > diff --git a/tests/generic/114 b/tests/generic/114 > index 068ed9e26..e0696ad92 100755 > --- a/tests/generic/114 > +++ b/tests/generic/114 > @@ -25,7 +25,7 @@ _require_sparse_files > _require_aiodio aio-dio-eof-race > > # Test does 512 byte DIO, so make sure that'll work > -logical_block_size=`_min_dio_alignment $TEST_DEV` > +logical_block_size=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > if [ "$logical_block_size" -gt "512" ]; then > _notrun "device block size: $logical_block_size greater than 512" > diff --git a/tests/generic/240 b/tests/generic/240 > index a333873ec..66a2ff74c 100755 > --- a/tests/generic/240 > +++ b/tests/generic/240 > @@ -29,7 +29,7 @@ echo "Silence is golden." > > rm -f $TEST_DIR/aiodio_sparse > > -logical_block_size=`_min_dio_alignment $TEST_DEV` > +logical_block_size=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > fs_block_size=`_get_block_size $TEST_DIR` > file_size=$((8 * $fs_block_size)) > > diff --git a/tests/generic/252 b/tests/generic/252 > index 39fa5531f..3ee2b0a67 100755 > --- a/tests/generic/252 > +++ b/tests/generic/252 > @@ -49,7 +49,7 @@ nr=640 > bufnr=128 > filesize=$((blksz * nr)) > bufsize=$((blksz * bufnr)) > -alignment=`_min_dio_alignment $TEST_DEV` > +alignment=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > _require_fs_space $SCRATCH_MNT $((filesize / 1024 * 5 / 4)) > > diff --git a/tests/generic/263 b/tests/generic/263 > index 62eaec1d7..91cfbe525 100755 > --- a/tests/generic/263 > +++ b/tests/generic/263 > @@ -16,7 +16,7 @@ _require_test > _require_odirect > > psize=`$here/src/feature -s` > -bsize=`_min_dio_alignment $TEST_DEV` > +bsize=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > run_fsx -N 10000 -o 8192 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z > run_fsx -N 10000 -o 128000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z > diff --git a/tests/generic/329 b/tests/generic/329 > index e29a8ca4c..ab37e047f 100755 > --- a/tests/generic/329 > +++ b/tests/generic/329 > @@ -40,7 +40,7 @@ nr=640 > bufnr=128 > filesize=$((blksz * nr)) > bufsize=$((blksz * bufnr)) > -alignment=`_min_dio_alignment $TEST_DEV` > +alignment=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > _require_fs_space $SCRATCH_MNT $((filesize / 1024 * 3 * 5 / 4)) > > diff --git a/tests/generic/330 b/tests/generic/330 > index 83e1459fa..4fa81f991 100755 > --- a/tests/generic/330 > +++ b/tests/generic/330 > @@ -36,7 +36,7 @@ nr=640 > bufnr=128 > filesize=$((blksz * nr)) > bufsize=$((blksz * bufnr)) > -alignment=`_min_dio_alignment $TEST_DEV` > +alignment=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > _require_fs_space $SCRATCH_MNT $((filesize / 1024 * 3 * 5 / 4)) > > diff --git a/tests/generic/450 b/tests/generic/450 > index 96e559da6..689f1051e 100755 > --- a/tests/generic/450 > +++ b/tests/generic/450 > @@ -31,7 +31,7 @@ _require_test > _require_odirect > > tfile=$TEST_DIR/testfile_${seq} > -ssize=`_min_dio_alignment $TEST_DEV` > +ssize=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > bsize=`_get_block_size $TEST_DIR` > > # let's focus on the specific bug that only happens when $ssize <= $bsize > diff --git a/tests/generic/465 b/tests/generic/465 > index eba3629ab..f8c4ea967 100755 > --- a/tests/generic/465 > +++ b/tests/generic/465 > @@ -26,7 +26,7 @@ _require_aiodio aio-dio-append-write-read-race > _require_test_program "feature" > > testfile=$TEST_DIR/$seq.$$ > -min_dio_align=`_min_dio_alignment $TEST_DEV` > +min_dio_align=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > page_size=`$here/src/feature -s` > > echo "non-aio dio test" > diff --git a/tests/generic/538 b/tests/generic/538 > index d6933cbb9..b9cf05de1 100755 > --- a/tests/generic/538 > +++ b/tests/generic/538 > @@ -28,7 +28,7 @@ _require_test > _require_aiodio aio-dio-write-verify > > localfile=$TEST_DIR/${seq}-aio-dio-write-verify-testfile > -diosize=`_min_dio_alignment $TEST_DEV` > +diosize=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > blocksize=`_get_block_size $TEST_DIR` > bufsize=$((blocksize * 2)) > truncsize=$((bufsize+diosize)) > diff --git a/tests/generic/551 b/tests/generic/551 > index f2907ac23..4a7f0a638 100755 > --- a/tests/generic/551 > +++ b/tests/generic/551 > @@ -19,7 +19,7 @@ _scratch_mkfs > $seqres.full 2>&1 > _scratch_mount > > localfile=$SCRATCH_MNT/testfile > -diosize=`_min_dio_alignment $SCRATCH_DEV` > +diosize=`$here/src/min_dio_alignment $SCRATCH_MNT $SCRATCH_DEV` > > # The maximum write size and offset are both 32k diosize. So the maximum > # file size will be (32 * 2)k > diff --git a/tests/generic/591 b/tests/generic/591 > index c22dc701b..f2fcd6162 100755 > --- a/tests/generic/591 > +++ b/tests/generic/591 > @@ -22,7 +22,7 @@ _require_test > _require_odirect > _require_test_program "splice-test" > > -diosize=`_min_dio_alignment $TEST_DEV` > +diosize=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > $here/src/splice-test -s $diosize -r $TEST_DIR/a > $here/src/splice-test -rd $TEST_DIR/a > diff --git a/tests/xfs/194 b/tests/xfs/194 > index 9abd2c321..1f83d534c 100755 > --- a/tests/xfs/194 > +++ b/tests/xfs/194 > @@ -43,11 +43,6 @@ _scratch_mkfs_xfs >/dev/null 2>&1 > # For this test we use block size = 1/8 page size > pgsize=`$here/src/feature -s` > blksize=`expr $pgsize / 8` > -secsize=`_min_dio_alignment $SCRATCH_DEV` > - > -if [ $secsize -gt $blksize ];then > - _notrun "sector size($secsize) too large for platform page size($pgsize)" > -fi > > # Filter out file mountpoint and physical location info > # Input: > @@ -84,6 +79,12 @@ unset XFS_MKFS_OPTIONS > # we need 512 byte block size, so crc's are turned off > _scratch_mkfs_xfs -m crc=0 -b size=$blksize >/dev/null 2>&1 > _scratch_mount > + > +secsize=`$here/src/min_dio_alignment $SCRATCH_MNT $SCRATCH_DEV` > +if [ $secsize -gt $blksize ];then > + _notrun "sector size($secsize) too large for platform page size($pgsize)" > +fi > + > test "$(_get_block_size $SCRATCH_MNT)" = $blksize || \ > _notrun "Could not get $blksize-byte blocks" > > diff --git a/tests/xfs/201 b/tests/xfs/201 > index a0d2c9150..60cc84ed2 100755 > --- a/tests/xfs/201 > +++ b/tests/xfs/201 > @@ -24,10 +24,9 @@ _cleanup() > > file=$SCRATCH_MNT/f > > -min_align=`_min_dio_alignment $SCRATCH_DEV` > - > do_pwrite() > { > + min_align=$3 > offset=`expr $1 \* $min_align` > end=`expr $2 \* $min_align` > length=`expr $end - $offset` > @@ -40,28 +39,30 @@ _require_scratch > _scratch_mkfs_xfs >/dev/null 2>&1 > _scratch_mount > > +min_align=`$here/src/min_dio_alignment $SCRATCH_MNT $SCRATCH_DEV` > + > # Create a fragmented file > -do_pwrite 30792 31039 > -do_pwrite 30320 30791 > -do_pwrite 29688 30319 > -do_pwrite 29536 29687 > -do_pwrite 27216 29535 > -do_pwrite 24368 27215 > -do_pwrite 21616 24367 > -do_pwrite 20608 21615 > -do_pwrite 19680 20607 > -do_pwrite 19232 19679 > -do_pwrite 17840 19231 > -do_pwrite 16928 17839 > -do_pwrite 15168 16927 > -do_pwrite 14048 15167 > -do_pwrite 12152 14047 > -do_pwrite 11344 12151 > -do_pwrite 8792 11343 > -do_pwrite 6456 8791 > -do_pwrite 5000 6455 > -do_pwrite 1728 4999 > -do_pwrite 0 1727 > +do_pwrite 30792 31039 $min_align > +do_pwrite 30320 30791 $min_align > +do_pwrite 29688 30319 $min_align > +do_pwrite 29536 29687 $min_align > +do_pwrite 27216 29535 $min_align > +do_pwrite 24368 27215 $min_align > +do_pwrite 21616 24367 $min_align > +do_pwrite 20608 21615 $min_align > +do_pwrite 19680 20607 $min_align > +do_pwrite 19232 19679 $min_align > +do_pwrite 17840 19231 $min_align > +do_pwrite 16928 17839 $min_align > +do_pwrite 15168 16927 $min_align > +do_pwrite 14048 15167 $min_align > +do_pwrite 12152 14047 $min_align > +do_pwrite 11344 12151 $min_align > +do_pwrite 8792 11343 $min_align > +do_pwrite 6456 8791 $min_align > +do_pwrite 5000 6455 $min_align > +do_pwrite 1728 4999 $min_align > +do_pwrite 0 1727 $min_align > > sync > sync > diff --git a/tests/xfs/237 b/tests/xfs/237 > index 5f264ff44..194cd0459 100755 > --- a/tests/xfs/237 > +++ b/tests/xfs/237 > @@ -41,7 +41,7 @@ nr=640 > bufnr=128 > filesize=$((blksz * nr)) > bufsize=$((blksz * bufnr)) > -alignment=`_min_dio_alignment $TEST_DEV` > +alignment=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > _require_fs_space $SCRATCH_MNT $((filesize / 1024 * 3 * 5 / 4)) > _require_congruent_file_oplen $SCRATCH_MNT $blksz > diff --git a/tests/xfs/239 b/tests/xfs/239 > index 277bd4548..bfe722c0a 100755 > --- a/tests/xfs/239 > +++ b/tests/xfs/239 > @@ -40,7 +40,7 @@ filesize=$((blksz * nr)) > bufsize=$((blksz * bufnr)) > filesize=$filesize > bufsize=$bufsize > -alignment=`_min_dio_alignment $TEST_DEV` > +alignment=`$here/src/min_dio_alignment $TEST_DIR $TEST_DEV` > > _require_fs_space $SCRATCH_MNT $((filesize / 1024 * 3 * 5 / 4)) > > diff --git a/tests/xfs/556 b/tests/xfs/556 > index 5a2e7fd6d..79e03caf4 100755 > --- a/tests/xfs/556 > +++ b/tests/xfs/556 > @@ -82,7 +82,7 @@ ENDL > > # All sector numbers that we feed to the kernel must be in units of 512b, but > # they also must be aligned to the device's logical block size. > -logical_block_size=$(_min_dio_alignment $SCRATCH_DEV) > +logical_block_size=`$here/src/min_dio_alignment $SCRATCH_MNT $SCRATCH_DEV` > kernel_sectors_per_device_lba=$((logical_block_size / 512)) > > # Mark as bad one of the device LBAs in the middle of the extent. Target the > -- > 2.43.0 > >