Re: [PATCH 4/5] generic: test I/O on devices with T10 protection information
"Darrick J. Wong" <[email protected]>
| Newsgroups | org.kernel.vger.fstests,org.kernel.vger.linux-scsi |
|---|---|
| Message-ID | <20260821233749.GG839663@frogsfrogsfrogs> |
On Fri, Aug 21, 2026 at 07:11:29AM +0200, Christoph Hellwig wrote: > Add a test that runs fsx in buffered and direct I/O mode on T10 PI > type 1, 2, 3 with and without strip/insert using scsi_debug. > > Signed-off-by: Christoph Hellwig <[email protected]> > --- > tests/generic/2301 | 91 ++++++++++++++++++++++++++++++++++++++++++ > tests/generic/2301.out | 73 +++++++++++++++++++++++++++++++++ > 2 files changed, 164 insertions(+) > create mode 100755 tests/generic/2301 > create mode 100644 tests/generic/2301.out > > diff --git a/tests/generic/2301 b/tests/generic/2301 > new file mode 100755 > index 000000000000..ba6952855f55 > --- /dev/null > +++ b/tests/generic/2301 > @@ -0,0 +1,91 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2026 Christoph Hellwig > +# > +# FS QA Test No. 2301 > +# > +# Basix FSX sanity check when using T10 protection information > +# > +. ./common/preamble > +_begin_fstest auto rw pi dangerous Why dangerous? Can this crash the system? > + > +_cleanup() > +{ > + cd / > + rm -r -f $tmp.* > + [ -d "$SCSI_DEBUG_MNT" ] && _unmount $SCSI_DEBUG_MNT 2>/dev/null > + _put_scsi_debug_dev > +} > + > +. ./common/scsi_debug > + > +_require_debugfs > +_require_scsi_debug > +# If TEST_DEV is block device, make sure current fs is a localfs which can be > +# written on scsi_debug device > +_require_test > +_require_block_device $TEST_DEV > +_require_odirect > + > +size=$(_small_fs_size_mb 256) > + > +# like run_fsx(), but using a custom path > +fsx_run() > +{ > + _run_fsx_on_file $SCSI_DEBUG_MNT/junk $@ || _exit 1 > +} > + > +test_dif() > +{ > + local pi_type=$1 > + local pi_enable="$2" > + > + scsi_debug_pi_opts="write_same_length=0 dif=${pi_type} dix=1" > + SCSI_DEBUG_DEV=`_get_scsi_debug_dev 512 512 0 $size $scsi_debug_pi_opts` > + > + SCSI_DEBUG_MNT="$TEST_DIR/scsi_debug_$seq" > + rm -rf $SCSI_DEBUG_MNT > + mkdir $SCSI_DEBUG_MNT > + > + _mkfs_dev $SCSI_DEBUG_DEV || \ > + _fail "Can't make $FSTYP on DIF-enabled scsi_debug device" I wonder, wouldn't it help to broaden feature testing coverage if we could inject the scratch device's mkfs/mount options here? With just a bare _mkfs_dev you only test the mkfs defaults. For example, you won't be testing xfs with metadir and t10 until mkfs.xfs turns that on by default. That said, the big problem with that is that there's only one scsi-debug device and multi-device scratch fs options won't work with that. I'm not ride-or-die for this, but I thought it was worth mentioning. --D > + run_check _mount $SCSI_DEBUG_DEV $SCSI_DEBUG_MNT > + bsize=$($here/src/min_dio_alignment $SCSI_DEBUG_MNT $SCSI_DEBUG_DEV) > + > + local integrity_path="$(_sysfs_block_integrity_path $SCSI_DEBUG_DEV)" > + echo $pi_enable > $integrity_path/read_verify > + echo $pi_enable > $integrity_path/write_generate > + > + # fsx load similar to generic/091 > + echo "Testing direct I/O for DIF type $pi_type (enabled: $pi_enable)" > + local dio_opts="-r PSIZE -t BSIZE -w BSIZE" > + fsx_run -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > + fsx_run -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > + fsx_run -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > + fsx_run -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > + fsx_run -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > + fsx_run -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > + > + # fsx load similar to generic/091 but using buffered I/O > + echo "Testing buffered I/O for DIF type $pi_type (enabled: $pi_enable)" > + fsx_run -N 10000 -l 500000 > + fsx_run -N 10000 -o 8192 -l 500000 > + fsx_run -N 10000 -o 32768 -l 500000 > + fsx_run -N 10000 -o 128000 -l 500000 > + > + [ -d "$SCSI_DEBUG_MNT" ] && _unmount $SCSI_DEBUG_MNT 2>/dev/null > + _put_scsi_debug_dev > +} > + > +# Test with PI fully enabled > +test_dif 1 1 > +test_dif 2 1 > +test_dif 3 1 > + > +# Test with strip / insert in the HBA > +test_dif 1 0 > +test_dif 2 0 > +test_dif 3 0 > + > +# success, all done > +_exit 0 > diff --git a/tests/generic/2301.out b/tests/generic/2301.out > new file mode 100644 > index 000000000000..dda88676a219 > --- /dev/null > +++ b/tests/generic/2301.out > @@ -0,0 +1,73 @@ > +QA output created by 2301 > +Testing direct I/O for DIF type 1 (enabled: 1) > +fsx -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > +Testing buffered I/O for DIF type 1 (enabled: 1) > +fsx -N 10000 -l 500000 > +fsx -N 10000 -o 8192 -l 500000 > +fsx -N 10000 -o 32768 -l 500000 > +fsx -N 10000 -o 128000 -l 500000 > +Testing direct I/O for DIF type 2 (enabled: 1) > +fsx -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > +Testing buffered I/O for DIF type 2 (enabled: 1) > +fsx -N 10000 -l 500000 > +fsx -N 10000 -o 8192 -l 500000 > +fsx -N 10000 -o 32768 -l 500000 > +fsx -N 10000 -o 128000 -l 500000 > +Testing direct I/O for DIF type 3 (enabled: 1) > +fsx -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > +Testing buffered I/O for DIF type 3 (enabled: 1) > +fsx -N 10000 -l 500000 > +fsx -N 10000 -o 8192 -l 500000 > +fsx -N 10000 -o 32768 -l 500000 > +fsx -N 10000 -o 128000 -l 500000 > +Testing direct I/O for DIF type 1 (enabled: 0) > +fsx -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > +Testing buffered I/O for DIF type 1 (enabled: 0) > +fsx -N 10000 -l 500000 > +fsx -N 10000 -o 8192 -l 500000 > +fsx -N 10000 -o 32768 -l 500000 > +fsx -N 10000 -o 128000 -l 500000 > +Testing direct I/O for DIF type 2 (enabled: 0) > +fsx -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > +Testing buffered I/O for DIF type 2 (enabled: 0) > +fsx -N 10000 -l 500000 > +fsx -N 10000 -o 8192 -l 500000 > +fsx -N 10000 -o 32768 -l 500000 > +fsx -N 10000 -o 128000 -l 500000 > +Testing direct I/O for DIF type 3 (enabled: 0) > +fsx -N 10000 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 8192 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 32768 -l 500000 -r BSIZE -w BSIZE -Z -R -W > +fsx -N 10000 -o 128000 -l 500000 -r BSIZE -w BSIZE -Z -W > +Testing buffered I/O for DIF type 3 (enabled: 0) > +fsx -N 10000 -l 500000 > +fsx -N 10000 -o 8192 -l 500000 > +fsx -N 10000 -o 32768 -l 500000 > +fsx -N 10000 -o 128000 -l 500000 > -- > 2.53.0 > >