Linux SCSI subsystem development
 help / color / mirror / Atom feed
* add tests for file system on devices using protection information v3
@ 2026-08-31  6:45 Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 1/6] common/scsi_debug: don't slow down I/O Christoph Hellwig
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

Hi all,

this series adds support to exercise I/O on file systems using protection
information in the device, including that corruption is properly
reported.

The second test requires a patch to inject corruption into scsi_debug
that was posted to the linux-scsi list.

Changes since v2:
 - factor out a _bdev_disk_name helper

Changes since v1:
 - fix various requirements
 - use _exit
 - cleanup up the scsi_debug options building
 - add a new PI group
 - mark one of the new tests dangerous as it can crash Linux 7.2 and earlier

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/6] common/scsi_debug: don't slow down I/O
  2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
@ 2026-08-31  6:45 ` Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 2/6] common: factor out a _bdev_disk_name helper Christoph Hellwig
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

scsi_debug by defaults delays I/O and doesn't support multi-page I/O.
Flipping these defaults speed up each test using scsi_debug by more than
an order of magnitute on my test systems.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
---
 common/scsi_debug | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/common/scsi_debug b/common/scsi_debug
index c3fe7be623fa..af51905dc4ba 100644
--- a/common/scsi_debug
+++ b/common/scsi_debug
@@ -59,9 +59,19 @@ _get_scsi_debug_dev()
 		let physical=physical/2
 		let phys_exp=phys_exp+1
 	done
-	opts="sector_size=$logical physblk_exp=$phys_exp lowest_aligned=$unaligned dev_size_mb=$size $@"
-	echo "scsi_debug options $opts" >> $seqres.full
-	modprobe scsi_debug $opts
+
+	local opts=(
+		"sector_size=$logical"
+		"physblk_exp=$phys_exp"
+		"lowest_aligned=$unaligned"
+		"dev_size_mb=$size"
+		"delay=0"
+		"clustering=1"
+	)
+	opts+=("$@")
+
+	echo "scsi_debug options ${opts[*]}" >> $seqres.full
+	modprobe scsi_debug "${opts[@]}"
 	[ $? -eq 0 ] || _fail "scsi_debug modprobe failed"
 	$UDEV_SETTLE_PROG
 	device=`grep -wl scsi_debug /sys/block/sd*/device/model | awk -F / '{print $4}'`
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/6] common: factor out a _bdev_disk_name helper
  2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 1/6] common/scsi_debug: don't slow down I/O Christoph Hellwig
@ 2026-08-31  6:45 ` Christoph Hellwig
  2026-08-31 17:03   ` Darrick J. Wong
  2026-08-31  6:45 ` [PATCH 3/6] common: add a _sysfs_block_integrity_path helper Christoph Hellwig
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

This will be reused to look for the integrity subdirectory soon.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 common/rc | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/common/rc b/common/rc
index 8add0eedf942..2fa7ddebd8fd 100644
--- a/common/rc
+++ b/common/rc
@@ -5233,28 +5233,35 @@ _sysfs_dev()
 	echo /sys/dev/block/$maj:$min
 }
 
-# Get the sysfs queue path for a block device, handling partitions correctly.
-_sysfs_queue_path()
+#
+# Get the name for the main disk block device given an arbitrary blockdevice
+# /dev/ entry
+#
+_bdev_disk_name()
 {
-	local dev parent
-	dev=$(_short_dev "$1")
+	local dev=$(_short_dev "$1")
 
 	# For partitions, queue details are in the parent device's sysfs dir
 	if [ -e "/sys/class/block/$dev/partition" ]; then
-		parent=$(basename "$(readlink -f /sys/class/block/$dev/..)")
-	else
-		parent="$dev"
+		dev=$(basename "$(readlink -f /sys/class/block/$dev/..)")
 	fi
 
-	local queue_path="/sys/block/$parent/queue"
+	echo "$dev"
+}
+
+# Get the sysfs queue path for a block device, handling partitions correctly.
+_sysfs_queue_path()
+{
+	local disk=$(_bdev_disk_name "$1")
+	local queue_path="/sys/block/$disk/queue"
 
 	# Verify the path exists before returning
 	if [ -e "$queue_path" ]; then
 		echo "$queue_path"
 		return 0
-	else
-		return 1
 	fi
+
+	return 1
 }
 
 # Get the minimum block size of a file.  Usually this is the
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/6] common: add a _sysfs_block_integrity_path helper
  2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 1/6] common/scsi_debug: don't slow down I/O Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 2/6] common: factor out a _bdev_disk_name helper Christoph Hellwig
@ 2026-08-31  6:45 ` Christoph Hellwig
  2026-08-31 17:03   ` Darrick J. Wong
  2026-08-31  6:45 ` [PATCH 4/6] add a "pi" group Christoph Hellwig
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

Add a helper function to find the sysfs integrity directory for a given
block device.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 common/rc | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/common/rc b/common/rc
index 2fa7ddebd8fd..5e709dd79993 100644
--- a/common/rc
+++ b/common/rc
@@ -5264,6 +5264,21 @@ _sysfs_queue_path()
 	return 1
 }
 
+# Get the sysfs block device integrity/ path for a block device, handling
+# partitions correctly.
+_sysfs_block_integrity_path()
+{
+	local disk=$(_bdev_disk_name "$1")
+	local integrity_path="/sys/block/$disk/integrity"
+
+	if [ -e "$integrity_path" ]; then
+		echo "$integrity_path"
+		return 0
+	fi
+
+	return 1
+}
+
 # Get the minimum block size of a file.  Usually this is the
 # minimum fs block size, but some filesystems (ocfs2) do block
 # mappings in larger units.
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/6] add a "pi" group
  2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
                   ` (2 preceding siblings ...)
  2026-08-31  6:45 ` [PATCH 3/6] common: add a _sysfs_block_integrity_path helper Christoph Hellwig
@ 2026-08-31  6:45 ` Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 5/6] generic: test I/O on devices with T10 protection information Christoph Hellwig
  2026-08-31  6:45 ` [PATCH 6/6] generic: test corruption detection using " Christoph Hellwig
  5 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

Add a group for tests exercising T10 protection information.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
---
 doc/group-names.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/doc/group-names.txt b/doc/group-names.txt
index 424e2c4a1ca6..ef6b8f51cf87 100644
--- a/doc/group-names.txt
+++ b/doc/group-names.txt
@@ -137,6 +137,7 @@ tape			dump and restore with a tape
 tempfsid		temporary fsid
 thin			thin provisioning
 trim			FITRIM ioctl
+pi			Protection Information
 udf			UDF functionality tests
 union			tests from the unionmount test suite
 unlink			O_TMPFILE unlinked files
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/6] generic: test I/O on devices with T10 protection information
  2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
                   ` (3 preceding siblings ...)
  2026-08-31  6:45 ` [PATCH 4/6] add a "pi" group Christoph Hellwig
@ 2026-08-31  6:45 ` Christoph Hellwig
  2026-09-01  6:38   ` Kanchan Joshi
  2026-08-31  6:45 ` [PATCH 6/6] generic: test corruption detection using " Christoph Hellwig
  5 siblings, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

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 <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
---
 tests/generic/2301     | 94 ++++++++++++++++++++++++++++++++++++++++++
 tests/generic/2301.out | 73 ++++++++++++++++++++++++++++++++
 2 files changed, 167 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..6bf026bfeb60
--- /dev/null
+++ b/tests/generic/2301
@@ -0,0 +1,94 @@
+#! /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
+
+_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
+
+_fixed_by_kernel_commit 8a8685b32c07 \
+	"iomap: don't free integrity payload that doesn't exist"
+
+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"
+	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


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 6/6] generic: test corruption detection using T10 protection information
  2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
                   ` (4 preceding siblings ...)
  2026-08-31  6:45 ` [PATCH 5/6] generic: test I/O on devices with T10 protection information Christoph Hellwig
@ 2026-08-31  6:45 ` Christoph Hellwig
  5 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2026-08-31  6:45 UTC (permalink / raw)
  To: Zorro Lang
  Cc: fstests, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	John Garry, Darrick J. Wong, linux-scsi

Add a test that simulates bit flips in data and misdirected writes and
checks that file systems detect it when run on devices using protection
information.

This requires the new scsi_debug corruption injection.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
---
 tests/generic/2302     | 128 +++++++++++++++++++++++++++++++++++++++++
 tests/generic/2302.out |  21 +++++++
 2 files changed, 149 insertions(+)
 create mode 100755 tests/generic/2302
 create mode 100644 tests/generic/2302.out

diff --git a/tests/generic/2302 b/tests/generic/2302
new file mode 100755
index 000000000000..4a9d9165174b
--- /dev/null
+++ b/tests/generic/2302
@@ -0,0 +1,128 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2026 Christoph Hellwig
+#
+# FS QA Test No. 2302
+#
+# Test that T10 DIF detects bitflips and misplaced writes.
+#
+. ./common/preamble
+_begin_fstest auto rw pi
+
+_cleanup()
+{
+	cd /
+	rm -r -f $tmp.*
+	[ -d "$SCSI_DEBUG_MNT" ] && _unmount $SCSI_DEBUG_MNT 2>/dev/null
+	_put_scsi_debug_dev
+}
+
+. ./common/scsi_debug
+. ./common/filter
+
+_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_xfs_io_command fiemap
+_require_odirect
+
+# FIEMAP on Btrfs returns logical addresses within the filesystem's address
+# space, not physical device offsets. Writing to these offsets on $SCRATCH_DEV
+# would corrupt the filesystem in multi-device setups.
+_exclude_fs btrfs
+
+size=$(_small_fs_size_mb 256)
+
+test_dif()
+{
+	local pi_type=$1
+	local last=$2
+	local bit_errors=$3
+	local reftag_adjust=$4
+
+	echo -n "Testing DIF type $pi_type "
+	if [ "$bit_errors" -gt "0" ]; then
+		echo -n "bit errors ($bit_errors) in "
+	fi
+	if [ "$reftag_adjust" -ne "0" ]; then
+		echo -n "reftag adjustment by $reftag_adjust in "
+	fi
+	if [ "$last" -eq 1 ]; then
+		echo "last sector"
+	else
+		echo "first sector"
+	fi
+
+	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"
+	run_check _mount $SCSI_DEBUG_DEV $SCSI_DEBUG_MNT
+
+	local blksz=$(_get_block_size $SCSI_DEBUG_MNT)
+	local testfile="$SCSI_DEBUG_MNT/test"
+
+	$XFS_IO_PROG -d -f \
+		-c "pwrite -S 0x66 0 $((128 * blksz))" \
+		-c fsync \
+		$testfile >> $seqres.full 2>&1
+
+	local phys_blk=$(_get_file_extent_sector $testfile 0)
+	if [ -z "$phys_blk" ]; then
+		_fail "$test_name: failed to get physical block offset via fiemap"
+	fi
+
+	local dev=$(_short_dev $SCSI_DEBUG_DEV)
+	local debugfs_dir=$(ls /sys/block/$dev/device/scsi_device/)
+	local debugfs_file="/sys/kernel/debug/scsi_debug/$debugfs_dir/corrupt"
+
+	if [ ! -f "$debugfs_file" ]; then
+		_notrun "scsi_debug corruption injection not supported"
+	fi
+
+	if [ "$last" -eq 1 ]; then
+		echo "adding to $phys_blk" >> $seqres.full
+		phys_blk=$((phys_blk + 127))
+	fi
+
+	echo "lba=$phys_blk,num=1,bit_errors=$bit_errors,reftag_adjust=$reftag_adjust" \
+		 > $debugfs_file
+
+	$XFS_IO_PROG -d -f \
+		-c "pread 0 $((128 * blksz))" \
+		$testfile
+
+	[ -d "$SCSI_DEBUG_MNT" ] && _unmount $SCSI_DEBUG_MNT 2>/dev/null
+	_put_scsi_debug_dev
+}
+
+# test data corruption in first block
+test_dif 1 0 2 0
+test_dif 2 0 2 0
+test_dif 3 0 2 0
+
+# test data corruption in last block
+test_dif 1 1 2 0
+test_dif 2 1 2 0
+test_dif 3 1 2 0
+
+
+# Note: Type 3 doesn't have a refrag, so don't test it
+
+# reftag mismatch in first block
+test_dif 1 0 0 8
+test_dif 2 0 0 8
+
+# reftag mismatch in last block
+test_dif 1 1 0 8
+test_dif 2 1 0 8
+
+_exit 0
diff --git a/tests/generic/2302.out b/tests/generic/2302.out
new file mode 100644
index 000000000000..03b68d904943
--- /dev/null
+++ b/tests/generic/2302.out
@@ -0,0 +1,21 @@
+QA output created by 2302
+Testing DIF type 1 bit errors (2) in first sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 2 bit errors (2) in first sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 3 bit errors (2) in first sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 1 bit errors (2) in last sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 2 bit errors (2) in last sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 3 bit errors (2) in last sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 1 reftag adjustment by 8 in first sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 2 reftag adjustment by 8 in first sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 1 reftag adjustment by 8 in last sector
+pread: Invalid or incomplete multibyte or wide character
+Testing DIF type 2 reftag adjustment by 8 in last sector
+pread: Invalid or incomplete multibyte or wide character
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/6] common: factor out a _bdev_disk_name helper
  2026-08-31  6:45 ` [PATCH 2/6] common: factor out a _bdev_disk_name helper Christoph Hellwig
@ 2026-08-31 17:03   ` Darrick J. Wong
  0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2026-08-31 17:03 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Zorro Lang, fstests, Martin K. Petersen, Kanchan Joshi,
	Anuj Gupta, John Garry, linux-scsi

On Mon, Aug 31, 2026 at 09:45:46AM +0300, Christoph Hellwig wrote:
> This will be reused to look for the integrity subdirectory soon.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks good to me, thanks for refactoring this!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  common/rc | 27 +++++++++++++++++----------
>  1 file changed, 17 insertions(+), 10 deletions(-)
> 
> diff --git a/common/rc b/common/rc
> index 8add0eedf942..2fa7ddebd8fd 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5233,28 +5233,35 @@ _sysfs_dev()
>  	echo /sys/dev/block/$maj:$min
>  }
>  
> -# Get the sysfs queue path for a block device, handling partitions correctly.
> -_sysfs_queue_path()
> +#
> +# Get the name for the main disk block device given an arbitrary blockdevice
> +# /dev/ entry
> +#
> +_bdev_disk_name()
>  {
> -	local dev parent
> -	dev=$(_short_dev "$1")
> +	local dev=$(_short_dev "$1")
>  
>  	# For partitions, queue details are in the parent device's sysfs dir
>  	if [ -e "/sys/class/block/$dev/partition" ]; then
> -		parent=$(basename "$(readlink -f /sys/class/block/$dev/..)")
> -	else
> -		parent="$dev"
> +		dev=$(basename "$(readlink -f /sys/class/block/$dev/..)")
>  	fi
>  
> -	local queue_path="/sys/block/$parent/queue"
> +	echo "$dev"
> +}
> +
> +# Get the sysfs queue path for a block device, handling partitions correctly.
> +_sysfs_queue_path()
> +{
> +	local disk=$(_bdev_disk_name "$1")
> +	local queue_path="/sys/block/$disk/queue"
>  
>  	# Verify the path exists before returning
>  	if [ -e "$queue_path" ]; then
>  		echo "$queue_path"
>  		return 0
> -	else
> -		return 1
>  	fi
> +
> +	return 1
>  }
>  
>  # Get the minimum block size of a file.  Usually this is the
> -- 
> 2.53.0
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/6] common: add a _sysfs_block_integrity_path helper
  2026-08-31  6:45 ` [PATCH 3/6] common: add a _sysfs_block_integrity_path helper Christoph Hellwig
@ 2026-08-31 17:03   ` Darrick J. Wong
  0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2026-08-31 17:03 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Zorro Lang, fstests, Martin K. Petersen, Kanchan Joshi,
	Anuj Gupta, John Garry, linux-scsi

On Mon, Aug 31, 2026 at 09:45:47AM +0300, Christoph Hellwig wrote:
> Add a helper function to find the sysfs integrity directory for a given
> block device.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks good now,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  common/rc | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/common/rc b/common/rc
> index 2fa7ddebd8fd..5e709dd79993 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5264,6 +5264,21 @@ _sysfs_queue_path()
>  	return 1
>  }
>  
> +# Get the sysfs block device integrity/ path for a block device, handling
> +# partitions correctly.
> +_sysfs_block_integrity_path()
> +{
> +	local disk=$(_bdev_disk_name "$1")
> +	local integrity_path="/sys/block/$disk/integrity"
> +
> +	if [ -e "$integrity_path" ]; then
> +		echo "$integrity_path"
> +		return 0
> +	fi
> +
> +	return 1
> +}
> +
>  # Get the minimum block size of a file.  Usually this is the
>  # minimum fs block size, but some filesystems (ocfs2) do block
>  # mappings in larger units.
> -- 
> 2.53.0
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 5/6] generic: test I/O on devices with T10 protection information
  2026-08-31  6:45 ` [PATCH 5/6] generic: test I/O on devices with T10 protection information Christoph Hellwig
@ 2026-09-01  6:38   ` Kanchan Joshi
  0 siblings, 0 replies; 10+ messages in thread
From: Kanchan Joshi @ 2026-09-01  6:38 UTC (permalink / raw)
  To: Christoph Hellwig, Zorro Lang
  Cc: fstests, Martin K. Petersen, Anuj Gupta, John Garry,
	Darrick J. Wong, linux-scsi

On 8/31/2026 12:15 PM, Christoph Hellwig wrote:
> +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"
> +	run_check _mount $SCSI_DEBUG_DEV $SCSI_DEBUG_MNT
> +	bsize=$($here/src/min_dio_alignment $SCSI_DEBUG_MNT $SCSI_DEBUG_DEV)

bsize remains unused.

> +
> +	local integrity_path="$(_sysfs_block_integrity_path $SCSI_DEBUG_DEV)"
> +	echo $pi_enable > $integrity_path/read_verify
> +	echo $pi_enable > $integrity_path/write_generate

Can integrity_path be empty when CONFIG_BLK_DEV_INTEGRITY is off?> +
> +	# 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"

dio_opts is unused.

> +	fsx_run -N 10000            -l 500000 -r BSIZE -w BSIZE -Z -R -W

Is passing BSIZE correct?


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-09-01  6:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-31  6:45 add tests for file system on devices using protection information v3 Christoph Hellwig
2026-08-31  6:45 ` [PATCH 1/6] common/scsi_debug: don't slow down I/O Christoph Hellwig
2026-08-31  6:45 ` [PATCH 2/6] common: factor out a _bdev_disk_name helper Christoph Hellwig
2026-08-31 17:03   ` Darrick J. Wong
2026-08-31  6:45 ` [PATCH 3/6] common: add a _sysfs_block_integrity_path helper Christoph Hellwig
2026-08-31 17:03   ` Darrick J. Wong
2026-08-31  6:45 ` [PATCH 4/6] add a "pi" group Christoph Hellwig
2026-08-31  6:45 ` [PATCH 5/6] generic: test I/O on devices with T10 protection information Christoph Hellwig
2026-09-01  6:38   ` Kanchan Joshi
2026-08-31  6:45 ` [PATCH 6/6] generic: test corruption detection using " Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox