public inbox for fstests@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] Atomic write test fixes & refactoring
@ 2026-04-10  6:36 Ojaswin Mujoo
  2026-04-10  6:36 ` [PATCH 1/6] ext4/061,062: Minor fixes and refactoring Ojaswin Mujoo
                   ` (5 more replies)
  0 siblings, 6 replies; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests; +Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

* Changes since v1 [1] *

 * Add a helper to correctly get sysfs queue path, and 
   use it treewide for consistent handling.
 * Collect RVB from Darrick on patch 1
 * generic/765: Detect if mkfs succeeds
 * generic/775: Make variable local and rename it for clarity

For treewide changes I've tried to CC respective maintainers and
original authors. Please let me know if someone else needs to be looped
in.

[1] https://lore.kernel.org/fstests/726e43008315a1bed018c1b43aae2458aebc03bc.1775039135.git.ojaswin@linux.ibm.com/

Ojaswin Mujoo (6):
  ext4/061,062: Minor fixes and refactoring
  common/rc: Add _sysfs_queue_path helper with partition support
  generic/765: Fix sysfs queue path for nvme partitions
  generic/765: Ignore mkfs warning
  generic/775: Fix an infinite loop due to variable name clash
  treewide: Use _sysfs_queue_path helper in all queue access locations

 common/encrypt    |  7 ++-----
 common/rc         | 36 ++++++++++++++++++++++++++++++++----
 common/report     | 20 +++++++++++---------
 common/zoned      |  5 +++--
 tests/btrfs/076   | 11 +++++++----
 tests/btrfs/237   |  5 +++--
 tests/btrfs/273   |  4 +++-
 tests/btrfs/283   |  4 +++-
 tests/ext4/061    | 28 ++++++++++++++++++++--------
 tests/ext4/062    | 26 +++++++++++++++++++-------
 tests/generic/765 | 12 +++++++-----
 tests/generic/775 |  3 ++-
 12 files changed, 112 insertions(+), 49 deletions(-)

-- 
2.53.0


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

* [PATCH 1/6] ext4/061,062: Minor fixes and refactoring
  2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
@ 2026-04-10  6:36 ` Ojaswin Mujoo
  2026-04-14  9:52   ` Disha Goel
  2026-04-10  6:36 ` [PATCH 2/6] common/rc: Add _sysfs_queue_path helper with partition support Ojaswin Mujoo
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu, Disha Goel

Fix 2 issues in the tests:

1. Use fs atomic write limits instead of bdev's

The tests use block device's limits instead of limits advertised
by filesystem. This can cause failures because block device might
advertise a higher maximum than the FS.  Fix the tests to use
filesystem's limits instead.

2. Fix the test loop range

Fix the test loop start and end so that our calculations for
blocksize, clustersize and iosize are correct.

Reported-by: Disha Goel <disgoel@linux.ibm.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
---
 tests/ext4/061 | 28 ++++++++++++++++++++--------
 tests/ext4/062 | 26 +++++++++++++++++++-------
 2 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/tests/ext4/061 b/tests/ext4/061
index 1d61c8b0..69ddeaca 100755
--- a/tests/ext4/061
+++ b/tests/ext4/061
@@ -31,10 +31,19 @@ _require_aiodio
 FIO_LOAD=$(($(nproc) * 2 * LOAD_FACTOR))
 SIZE=$((100*1024*1024))
 
-# Calculate fsblocksize as per bdev atomic write units.
-bdev_awu_min=$(_get_atomic_write_unit_min $SCRATCH_DEV)
-bdev_awu_max=$(_get_atomic_write_unit_max $SCRATCH_DEV)
-bs=$(_max 4096 "$bdev_awu_min")
+_scratch_mkfs > /dev/null 2>&1 || \
+	_notrun "mkfs failed"
+_try_scratch_mount || \
+	_notrun "mount failed"
+
+touch $SCRATCH_MNT/f
+
+fs_awu_min=$(_get_atomic_write_unit_min $SCRATCH_MNT/f)
+fs_awu_max=$(_get_atomic_write_unit_max $SCRATCH_MNT/f)
+bs=$(_max 4096 "$fs_awu_min")
+ps=$(_get_page_size)
+
+_scratch_unmount
 
 function create_fio_configs()
 {
@@ -97,10 +106,11 @@ run_test_one() {
 	local cs=$2
 	local iosize=$3
 
+	echo "== Testing: bs=$bs cs=$cs iosize=$iosize ==" >> $seqres.full
+
 	MKFS_OPTIONS="-O bigalloc -b $bs -C $cs"
 	_scratch_mkfs_ext4  >> $seqres.full 2>&1 || return
 	if _try_scratch_mount >> $seqres.full 2>&1; then
-		echo "== Testing: bs=$bs cs=$cs iosize=$iosize ==" >> $seqres.full
 
 		touch $SCRATCH_MNT/f1
 		create_fio_configs $iosize
@@ -127,7 +137,7 @@ run_test() {
 	# cluster sizes above 16 x blocksize are experimental so avoid them
 	# Also, cap cluster size at 128kb to keep it reasonable for large
 	# blocks size
-	max_cs=$(_min $((16 * bs)) "$bdev_awu_max" $((128 * 1024)))
+	max_cs=$(_min $((16 * bs)) "$fs_awu_max" $((128 * 1024)))
 
 	# Fuzz for combinations of blocksize, clustersize and
 	# iosize that cover most of the cases
@@ -145,8 +155,10 @@ fio_out=$tmp.fio.out
 create_fio_configs $bs
 _require_fio $fio_aw_config
 
-for ((bs=$bs; bs <= $(_get_page_size); bs = $bs << 1)); do
-	run_test $bs
+echo "Awu min: $fs_awu_min Awu max: $fs_awu_max" >> $seqres.full
+
+for ((bs=$fs_awu_min; bs <= $(_min ps fs_awu_max); bs = $bs << 1)); do
+	run_test $bs $cs $iosize
 done
 
 # success, all done
diff --git a/tests/ext4/062 b/tests/ext4/062
index 05cce696..56bf080c 100755
--- a/tests/ext4/062
+++ b/tests/ext4/062
@@ -33,10 +33,19 @@ _require_aiodio
 FSSIZE=$((360*1024*1024))
 FIO_LOAD=$(($(nproc) * LOAD_FACTOR))
 
-# Calculate bs as per bdev atomic write units.
-bdev_awu_min=$(_get_atomic_write_unit_min $SCRATCH_DEV)
-bdev_awu_max=$(_get_atomic_write_unit_max $SCRATCH_DEV)
-bs=$(_max 4096 "$bdev_awu_min")
+_scratch_mkfs > /dev/null 2>&1 || \
+	_notrun "mkfs failed"
+_try_scratch_mount || \
+	_notrun "mount failed"
+
+touch $SCRATCH_MNT/f
+
+fs_awu_min=$(_get_atomic_write_unit_min $SCRATCH_MNT/f)
+fs_awu_max=$(_get_atomic_write_unit_max $SCRATCH_MNT/f)
+bs=$(_max 4096 "$fs_awu_min")
+ps=$(_get_page_size)
+
+_scratch_unmount
 
 function create_fio_configs()
 {
@@ -146,10 +155,11 @@ run_test_one() {
 	local cs=$2
 	local iosize=$3
 
+	echo "Testing: bs=$bs cs=$cs iosize=$iosize" >> $seqres.full
+
 	MKFS_OPTIONS="-O bigalloc -b $bs -C $cs"
 	_scratch_mkfs_sized "$FSSIZE" >> $seqres.full 2>&1 || return
 	if _try_scratch_mount >> $seqres.full 2>&1; then
-		echo "Testing: bs=$bs cs=$cs iosize=$iosize" >> $seqres.full
 
 		touch $SCRATCH_MNT/f1
 		create_fio_configs $iosize
@@ -175,7 +185,7 @@ run_test() {
 	# cluster sizes above 16 x blocksize are experimental so avoid them
 	# Also, cap cluster size at 128kb to keep it reasonable for large
 	# blocks size
-	max_cs=$(_min $((16 * bs)) "$bdev_awu_max" $((128 * 1024)))
+	max_cs=$(_min $((16 * bs)) "$fs_awu_max" $((128 * 1024)))
 
 	# Fuzz for combinations of blocksize, clustersize and
 	# iosize that cover most of the cases
@@ -193,7 +203,9 @@ fio_out=$tmp.fio.out
 create_fio_configs $bs
 _require_fio $fio_aw_config
 
-for ((bs=$bs; bs <= $(_get_page_size); bs = $bs << 1)); do
+echo "Awu min: $fs_awu_min Awu max: $fs_awu_max" >> $seqres.full
+
+for ((bs=$fs_awu_min; bs <= $(_min ps fs_awu_max); bs = $bs << 1)); do
 	run_test $bs $cs $iosize
 done
 
-- 
2.53.0


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

* [PATCH 2/6] common/rc: Add _sysfs_queue_path helper with partition support
  2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
  2026-04-10  6:36 ` [PATCH 1/6] ext4/061,062: Minor fixes and refactoring Ojaswin Mujoo
@ 2026-04-10  6:36 ` Ojaswin Mujoo
  2026-04-10 16:50   ` Darrick J. Wong
  2026-04-10  6:36 ` [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions Ojaswin Mujoo
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests; +Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

Add a generic helper function to get the sysfs queue path for block
devices, properly handling partitions. Partitions don't have their own
queue directory in sysfs - they inherit from their parent device.

This helper checks if a device is a partition and returns the parent
device's queue path accordingly, making it easier to access queue
attributes for both whole disks and partitions.

Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
---
 common/rc | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/common/rc b/common/rc
index 5fe44e21..d7db5db1 100644
--- a/common/rc
+++ b/common/rc
@@ -5172,6 +5172,30 @@ _sysfs_dev()
 	echo /sys/dev/block/$maj:$min
 }
 
+# Get the sysfs queue path for a block device, handling partitions correctly.
+_sysfs_queue_path()
+{
+	local dev parent
+	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"
+	fi
+
+	local queue_path="/sys/block/$parent/queue"
+
+	# Verify the path exists before returning
+	if [ -e "$queue_path" ]; then
+		echo "$queue_path"
+		return 0
+	else
+		return 1
+	fi
+}
+
 # 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] 25+ messages in thread

* [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions
  2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
  2026-04-10  6:36 ` [PATCH 1/6] ext4/061,062: Minor fixes and refactoring Ojaswin Mujoo
  2026-04-10  6:36 ` [PATCH 2/6] common/rc: Add _sysfs_queue_path helper with partition support Ojaswin Mujoo
@ 2026-04-10  6:36 ` Ojaswin Mujoo
  2026-04-10 16:50   ` Darrick J. Wong
  2026-04-14  9:58   ` Disha Goel
  2026-04-10  6:36 ` [PATCH 4/6] generic/765: Ignore mkfs warning Ojaswin Mujoo
                   ` (2 subsequent siblings)
  5 siblings, 2 replies; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu, Disha Goel

This tests checks atomic write limits reported by statx() are same as
the ones reported by sysfs, however nvme partitions don't have the
/sys/block/nvme0n1p1 style entry and also use the namespace's queue
limits for atomic writes. This causes the test to fail because it
expects /sys/block/nvme0n*p* to be present.

Hence, use the new _sysfs_queue_path() helper to get the correct
atomic write limits

Also, fix a small typo (s/awu_min/awu_max) when printing awu limits to
seqres.full

Reported-by: Disha Goel <disgoel@linux.ibm.com>
Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
---
 tests/generic/765 | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tests/generic/765 b/tests/generic/765
index 8c4e0bd0..09be53db 100755
--- a/tests/generic/765
+++ b/tests/generic/765
@@ -94,16 +94,17 @@ test_atomic_writes()
     _scratch_unmount
 }
 
-sys_min_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_min_bytes")
-sys_max_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_max_bytes")
+queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
+sys_min_write=$(cat "$queue_path/atomic_write_unit_min_bytes")
+sys_max_write=$(cat "$queue_path/atomic_write_unit_max_bytes")
 
 bdev_min_write=$(_get_atomic_write_unit_min $SCRATCH_DEV)
 bdev_max_write=$(_get_atomic_write_unit_max $SCRATCH_DEV)
 
 echo "sysfs awu_min $sys_min_write" >> $seqres.full
-echo "sysfs awu_min $sys_max_write" >> $seqres.full
+echo "sysfs awu_max $sys_max_write" >> $seqres.full
 echo "bdev awu_min $bdev_min_write" >> $seqres.full
-echo "bdev awu_min $bdev_max_write" >> $seqres.full
+echo "bdev awu_max $bdev_max_write" >> $seqres.full
 
 # Test that statx atomic values are the same as sysfs values
 if [ "$sys_min_write" -ne "$bdev_min_write" ]; then
-- 
2.53.0


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

* [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
                   ` (2 preceding siblings ...)
  2026-04-10  6:36 ` [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions Ojaswin Mujoo
@ 2026-04-10  6:36 ` Ojaswin Mujoo
  2026-04-10 16:54   ` Darrick J. Wong
  2026-04-14 10:02   ` Disha Goel
  2026-04-10  6:36 ` [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash Ojaswin Mujoo
  2026-04-10  6:36 ` [PATCH 6/6] treewide: Use _sysfs_queue_path helper in all queue access locations Ojaswin Mujoo
  5 siblings, 2 replies; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu, Disha Goel

This test validates atomic writes for all possible block sizes. In ext4, for
smaller block sizes with configurations like:

export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"

The output can get corrupted with warnings like below because clustersize
more than 16xbs is experimental:

+ 16 times the block size is considered experimental

Hence pipe these to seqres.full to avoid false negatives.

Reported-by: Disha Goel <disgoel@linux.ibm.com>
Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
---
 tests/generic/765 | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/generic/765 b/tests/generic/765
index 09be53db..b7cc70f1 100755
--- a/tests/generic/765
+++ b/tests/generic/765
@@ -64,7 +64,8 @@ test_atomic_writes()
     local bsize=$1
 
     get_mkfs_opts $bsize
-    _scratch_mkfs $mkfs_opts >> $seqres.full
+    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
+        echo "mkfs $mkfs_opts failed"
     _scratch_mount
 
     test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
-- 
2.53.0


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

* [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash
  2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
                   ` (3 preceding siblings ...)
  2026-04-10  6:36 ` [PATCH 4/6] generic/765: Ignore mkfs warning Ojaswin Mujoo
@ 2026-04-10  6:36 ` Ojaswin Mujoo
  2026-04-10 16:51   ` Darrick J. Wong
  2026-04-14 10:05   ` Disha Goel
  2026-04-10  6:36 ` [PATCH 6/6] treewide: Use _sysfs_queue_path helper in all queue access locations Ojaswin Mujoo
  5 siblings, 2 replies; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu, Disha Goel

We use i as the iteration variable in the main test loop as well as some
internal loops. Due to this clash, $i variable of main test loops was
getting modified by the following loop in prep_mixed_mapping().

	for ((i=0; i<num_blocks; i++)); do

If num_blocks is less than 10 (example ext4 with blocksize 4k and
cluster size 8k) i would always be set as 3 and the main loop would
never exit. Use local variable to fix this and while we are at it,
rename it for clarity.

Reported-by: Disha Goel <disgoel@linux.ibm.com>
Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
---
 tests/generic/775 | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tests/generic/775 b/tests/generic/775
index 2a4287bb..6dc005a0 100755
--- a/tests/generic/775
+++ b/tests/generic/775
@@ -41,7 +41,8 @@ prep_mixed_mapping() {
 
 	local operations=("W" "H" "U")
 	local num_blocks=$((awu_max / blksz))
-	for ((i=0; i<num_blocks; i++)); do
+	local blkno
+	for ((blkno=0; blkno<num_blocks; blkno++)); do
 		local index=$((RANDOM % ${#operations[@]}))
 		local map="${operations[$index]}"
 		local mapping="${mapping}${map}"
-- 
2.53.0


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

* [PATCH 6/6] treewide: Use _sysfs_queue_path helper in all queue access locations
  2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
                   ` (4 preceding siblings ...)
  2026-04-10  6:36 ` [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash Ojaswin Mujoo
@ 2026-04-10  6:36 ` Ojaswin Mujoo
  2026-04-10 16:52   ` Darrick J. Wong
  5 siblings, 1 reply; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-10  6:36 UTC (permalink / raw)
  To: Zorro Lang, fstests; +Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

The sysfs queue dir for partitions is present in their parent device's
sysfs dir. This requires extra checks when trying to reading queue data
from sysfs. Currently, fstests open codes this handling or straight up
ignores it in some places.

Avoid this by converting all remaining direct sysfs queue accesses to
use the _sysfs_queue_path helper function. This ensures proper handling
of partitions across the entire codebase and provides a consistent
interface for accessing queue attributes.

Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
---
 common/encrypt  |  7 ++-----
 common/rc       | 12 ++++++++----
 common/report   | 20 +++++++++++---------
 common/zoned    |  5 +++--
 tests/btrfs/076 | 11 +++++++----
 tests/btrfs/237 |  5 +++--
 tests/btrfs/273 |  4 +++-
 tests/btrfs/283 |  4 +++-
 8 files changed, 40 insertions(+), 28 deletions(-)

diff --git a/common/encrypt b/common/encrypt
index f2687631..c9e0853d 100644
--- a/common/encrypt
+++ b/common/encrypt
@@ -173,11 +173,8 @@ _require_hw_wrapped_key_support()
 	local dev=$1
 
 	echo "Checking for HW-wrapped key support on $dev" >> $seqres.full
-	local sysfs_dir=$(_sysfs_dev $dev)
-	if [ ! -e $sysfs_dir/queue ]; then
-		sysfs_dir=$sysfs_dir/..
-	fi
-	if [ ! -e $sysfs_dir/queue/crypto/hw_wrapped_keys ]; then
+	local queue_path=$(_sysfs_queue_path $dev)
+	if [ $? -ne 0 ] || [ ! -e $queue_path/crypto/hw_wrapped_keys ]; then
 		_notrun "$dev doesn't support hardware-wrapped inline encryption keys"
 	fi
 
diff --git a/common/rc b/common/rc
index d7db5db1..9632b211 100644
--- a/common/rc
+++ b/common/rc
@@ -2502,7 +2502,11 @@ __scratch_dev_has_dax()
 {
 	local sysfs="/sys/block/$(_short_dev $SCRATCH_DEV)"
 	test -e "${sysfs}/dax" && return 0
-	test "$(cat "${sysfs}/queue/dax" 2>/dev/null)" = "1" && return 0
+
+	local queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
+	if [ $? -eq 0 ]; then
+		test "$(cat "${queue_path}/dax" 2>/dev/null)" = "1" && return 0
+	fi
 
 	return 1
 }
@@ -2562,10 +2566,10 @@ _zone_type()
 		echo "Usage: _zone_type <device>"
 		_exit 1
 	fi
-	local sdev=`_short_dev $target`
 
-	if [ -e /sys/block/${sdev}/queue/zoned ]; then
-		cat /sys/block/${sdev}/queue/zoned
+	local queue_path=$(_sysfs_queue_path $target)
+	if [ $? -eq 0 ] && [ -e "$queue_path/zoned" ]; then
+		cat "$queue_path/zoned"
 	else
 		echo none
 	fi
diff --git a/common/report b/common/report
index 7128bbeb..0d9ad78c 100644
--- a/common/report
+++ b/common/report
@@ -37,16 +37,18 @@ __generate_blockdev_report_vars() {
 
 	test -z "$bdev" && return
 	test -b "$bdev" || return
-	local sysfs_bdev="$(_sysfs_dev "$bdev")"
-
 	REPORT_VARS["${bdev_var}_SIZE_KB"]="$(( "$(blockdev --getsz "$bdev")" / 2 ))"
-	REPORT_VARS["${bdev_var}_ROTATIONAL"]="$(cat "$sysfs_bdev/queue/rotational" 2>/dev/null)"
-	REPORT_VARS["${bdev_var}_DAX"]="$(cat "$sysfs_bdev/queue/dax" 2>/dev/null)"
-	REPORT_VARS["${bdev_var}_DISCARD"]="$(sed -e 's/[1-9][0-9]*/1/g' "$sysfs_bdev/queue/discard_max_bytes" 2>/dev/null)"
-	REPORT_VARS["${bdev_var}_WRITE_ZEROES"]="$(sed -e 's/[1-9][0-9]*/1/g' "$sysfs_bdev/queue/write_zeroes_max_bytes" 2>/dev/null)"
-	REPORT_VARS["${bdev_var}_PHYS_BLOCK_BYTES"]="$(cat "$sysfs_bdev/queue/physical_block_size" 2>/dev/null)"
-	REPORT_VARS["${bdev_var}_LBA_BYTES"]="$(cat "$sysfs_bdev/queue/logical_block_size" 2>/dev/null)"
-	REPORT_VARS["${bdev_var}_ZONES"]="$(cat "$sysfs_bdev/queue/nr_zones" 2>/dev/null)"
+
+	local queue_path="$(_sysfs_queue_path "$bdev")"
+	if [ $? -eq 0 ]; then
+		REPORT_VARS["${bdev_var}_ROTATIONAL"]="$(cat "$queue_path/rotational" 2>/dev/null)"
+		REPORT_VARS["${bdev_var}_DAX"]="$(cat "$queue_path/dax" 2>/dev/null)"
+		REPORT_VARS["${bdev_var}_DISCARD"]="$(sed -e 's/[1-9][0-9]*/1/g' "$queue_path/discard_max_bytes" 2>/dev/null)"
+		REPORT_VARS["${bdev_var}_WRITE_ZEROES"]="$(sed -e 's/[1-9][0-9]*/1/g' "$queue_path/write_zeroes_max_bytes" 2>/dev/null)"
+		REPORT_VARS["${bdev_var}_PHYS_BLOCK_BYTES"]="$(cat "$queue_path/physical_block_size" 2>/dev/null)"
+		REPORT_VARS["${bdev_var}_LBA_BYTES"]="$(cat "$queue_path/logical_block_size" 2>/dev/null)"
+		REPORT_VARS["${bdev_var}_ZONES"]="$(cat "$queue_path/nr_zones" 2>/dev/null)"
+	fi
 }
 
 __import_report_vars() {
diff --git a/common/zoned b/common/zoned
index 88b81de5..89d0a061 100644
--- a/common/zoned
+++ b/common/zoned
@@ -17,8 +17,9 @@ _filter_blkzone_report()
 
 _require_limited_active_zones() {
     local dev=$1
-    local sysfs=$(_sysfs_dev ${dev})
-    local attr="${sysfs}/queue/max_active_zones"
+    local queue_path=$(_sysfs_queue_path ${dev})
+    [ $? -ne 0 ] && _notrun "cannot find queue path: $queue_path"
+    local attr="${queue_path}/max_active_zones"
 
     [ -e "${attr}" ] || _notrun "cannot find queue/max_active_zones. Maybe non-zoned device?"
     if [ $(cat "${attr}") == 0 ]; then
diff --git a/tests/btrfs/076 b/tests/btrfs/076
index c148406f..0a1e660d 100755
--- a/tests/btrfs/076
+++ b/tests/btrfs/076
@@ -28,10 +28,13 @@ _fixed_by_kernel_commit 4bcbb3325513 \
 # An extent size can be up to BTRFS_MAX_UNCOMPRESSED
 max_extent_size=$(( 128 * 1024 ))
 if _scratch_btrfs_is_zoned; then
-	zone_append_max=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/zone_append_max_bytes")
-	if [[ $zone_append_max -gt 0 && $zone_append_max -lt $max_extent_size ]]; then
-		# Round down to PAGE_SIZE
-		max_extent_size=$(( $zone_append_max / 4096 * 4096 ))
+	queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
+	if [ $? -eq 0 ]; then
+		zone_append_max=$(cat "$queue_path/zone_append_max_bytes")
+		if [[ $zone_append_max -gt 0 && $zone_append_max -lt $max_extent_size ]]; then
+			# Round down to PAGE_SIZE
+			max_extent_size=$(( $zone_append_max / 4096 * 4096 ))
+		fi
 	fi
 fi
 file_size=$(( 10 * 1024 * 1024 ))
diff --git a/tests/btrfs/237 b/tests/btrfs/237
index 675f4c42..07a56336 100755
--- a/tests/btrfs/237
+++ b/tests/btrfs/237
@@ -44,8 +44,9 @@ get_data_bg_physical()
 $BLKZONE_PROG report $SCRATCH_DEV | grep -q -e "nw" && \
 	_notrun "test is unreliable on devices with conventional zones"
 
-sdev="$(_short_dev $SCRATCH_DEV)"
-zone_size=$(($(cat /sys/block/${sdev}/queue/chunk_sectors) << 9))
+queue_path=$(_sysfs_queue_path $SCRATCH_DEV) || \
+    _notrun "Failed to get queue path: $queue_path"
+zone_size=$(($(cat "$queue_path/chunk_sectors") << 9))
 fssize=$((zone_size * 16))
 devsize=$(($(_get_device_size $SCRATCH_DEV) * 1024))
 # Create a minimal FS to kick the reclaim process
diff --git a/tests/btrfs/273 b/tests/btrfs/273
index 06ae5d53..60c3967b 100755
--- a/tests/btrfs/273
+++ b/tests/btrfs/273
@@ -38,7 +38,9 @@ _require_btrfs_command inspect-internal dump-tree
 # enabled.
 _require_no_compress
 
-max_active=$(cat $(_sysfs_dev ${SCRATCH_DEV})/queue/max_active_zones)
+queue_path=$(_sysfs_queue_path ${SCRATCH_DEV}) || \
+    _notrun "Failed to get queue path: $queue_path"
+max_active=$(cat "$queue_path/max_active_zones")
 
 # Fill the zones leaving the last 1MB
 fill_active_zones() {
diff --git a/tests/btrfs/283 b/tests/btrfs/283
index f7a8290a..9f89fafb 100755
--- a/tests/btrfs/283
+++ b/tests/btrfs/283
@@ -26,7 +26,9 @@ _wants_kernel_commit c7499a64dcf6 \
 
 extent_size=$(( 128 * 1024 ))
 if _scratch_btrfs_is_zoned; then
-	zone_append_max=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/zone_append_max_bytes")
+	queue_path=$(_sysfs_queue_path $SCRATCH_DEV) ||
+	    _notrun "Couldn't find queue path for zoned device"
+	zone_append_max=$(cat "$queue_path/zone_append_max_bytes")
 	if [[ $zone_append_max -gt 0 && $zone_append_max -lt $extent_size ]]; then
 		_notrun "zone append max $zone_append_max is smaller than wanted extent size $extent_size"
 	fi
-- 
2.53.0


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

* Re: [PATCH 2/6] common/rc: Add _sysfs_queue_path helper with partition support
  2026-04-10  6:36 ` [PATCH 2/6] common/rc: Add _sysfs_queue_path helper with partition support Ojaswin Mujoo
@ 2026-04-10 16:50   ` Darrick J. Wong
  0 siblings, 0 replies; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-10 16:50 UTC (permalink / raw)
  To: Ojaswin Mujoo
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu

On Fri, Apr 10, 2026 at 12:06:02PM +0530, Ojaswin Mujoo wrote:
> Add a generic helper function to get the sysfs queue path for block
> devices, properly handling partitions. Partitions don't have their own
> queue directory in sysfs - they inherit from their parent device.
> 
> This helper checks if a device is a partition and returns the parent
> device's queue path accordingly, making it easier to access queue
> attributes for both whole disks and partitions.
> 
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

Excellent!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  common/rc | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/common/rc b/common/rc
> index 5fe44e21..d7db5db1 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -5172,6 +5172,30 @@ _sysfs_dev()
>  	echo /sys/dev/block/$maj:$min
>  }
>  
> +# Get the sysfs queue path for a block device, handling partitions correctly.
> +_sysfs_queue_path()
> +{
> +	local dev parent
> +	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"
> +	fi
> +
> +	local queue_path="/sys/block/$parent/queue"
> +
> +	# Verify the path exists before returning
> +	if [ -e "$queue_path" ]; then
> +		echo "$queue_path"
> +		return 0
> +	else
> +		return 1
> +	fi
> +}
> +
>  # 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] 25+ messages in thread

* Re: [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions
  2026-04-10  6:36 ` [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions Ojaswin Mujoo
@ 2026-04-10 16:50   ` Darrick J. Wong
  2026-04-14  9:58   ` Disha Goel
  1 sibling, 0 replies; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-10 16:50 UTC (permalink / raw)
  To: Ojaswin Mujoo
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel

On Fri, Apr 10, 2026 at 12:06:03PM +0530, Ojaswin Mujoo wrote:
> This tests checks atomic write limits reported by statx() are same as
> the ones reported by sysfs, however nvme partitions don't have the
> /sys/block/nvme0n1p1 style entry and also use the namespace's queue
> limits for atomic writes. This causes the test to fail because it
> expects /sys/block/nvme0n*p* to be present.
> 
> Hence, use the new _sysfs_queue_path() helper to get the correct
> atomic write limits
> 
> Also, fix a small typo (s/awu_min/awu_max) when printing awu limits to
> seqres.full
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

Nicely cleaned up!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  tests/generic/765 | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/generic/765 b/tests/generic/765
> index 8c4e0bd0..09be53db 100755
> --- a/tests/generic/765
> +++ b/tests/generic/765
> @@ -94,16 +94,17 @@ test_atomic_writes()
>      _scratch_unmount
>  }
>  
> -sys_min_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_min_bytes")
> -sys_max_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_max_bytes")
> +queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
> +sys_min_write=$(cat "$queue_path/atomic_write_unit_min_bytes")
> +sys_max_write=$(cat "$queue_path/atomic_write_unit_max_bytes")
>  
>  bdev_min_write=$(_get_atomic_write_unit_min $SCRATCH_DEV)
>  bdev_max_write=$(_get_atomic_write_unit_max $SCRATCH_DEV)
>  
>  echo "sysfs awu_min $sys_min_write" >> $seqres.full
> -echo "sysfs awu_min $sys_max_write" >> $seqres.full
> +echo "sysfs awu_max $sys_max_write" >> $seqres.full
>  echo "bdev awu_min $bdev_min_write" >> $seqres.full
> -echo "bdev awu_min $bdev_max_write" >> $seqres.full
> +echo "bdev awu_max $bdev_max_write" >> $seqres.full
>  
>  # Test that statx atomic values are the same as sysfs values
>  if [ "$sys_min_write" -ne "$bdev_min_write" ]; then
> -- 
> 2.53.0
> 
> 

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

* Re: [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash
  2026-04-10  6:36 ` [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash Ojaswin Mujoo
@ 2026-04-10 16:51   ` Darrick J. Wong
  2026-04-14 10:05   ` Disha Goel
  1 sibling, 0 replies; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-10 16:51 UTC (permalink / raw)
  To: Ojaswin Mujoo
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel

On Fri, Apr 10, 2026 at 12:06:05PM +0530, Ojaswin Mujoo wrote:
> We use i as the iteration variable in the main test loop as well as some
> internal loops. Due to this clash, $i variable of main test loops was
> getting modified by the following loop in prep_mixed_mapping().
> 
> 	for ((i=0; i<num_blocks; i++)); do
> 
> If num_blocks is less than 10 (example ext4 with blocksize 4k and
> cluster size 8k) i would always be set as 3 and the main loop would
> never exit. Use local variable to fix this and while we are at it,
> rename it for clarity.
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

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

--D

> ---
>  tests/generic/775 | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/generic/775 b/tests/generic/775
> index 2a4287bb..6dc005a0 100755
> --- a/tests/generic/775
> +++ b/tests/generic/775
> @@ -41,7 +41,8 @@ prep_mixed_mapping() {
>  
>  	local operations=("W" "H" "U")
>  	local num_blocks=$((awu_max / blksz))
> -	for ((i=0; i<num_blocks; i++)); do
> +	local blkno
> +	for ((blkno=0; blkno<num_blocks; blkno++)); do
>  		local index=$((RANDOM % ${#operations[@]}))
>  		local map="${operations[$index]}"
>  		local mapping="${mapping}${map}"
> -- 
> 2.53.0
> 
> 

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

* Re: [PATCH 6/6] treewide: Use _sysfs_queue_path helper in all queue access locations
  2026-04-10  6:36 ` [PATCH 6/6] treewide: Use _sysfs_queue_path helper in all queue access locations Ojaswin Mujoo
@ 2026-04-10 16:52   ` Darrick J. Wong
  0 siblings, 0 replies; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-10 16:52 UTC (permalink / raw)
  To: Ojaswin Mujoo
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu

On Fri, Apr 10, 2026 at 12:06:06PM +0530, Ojaswin Mujoo wrote:
> The sysfs queue dir for partitions is present in their parent device's
> sysfs dir. This requires extra checks when trying to reading queue data
> from sysfs. Currently, fstests open codes this handling or straight up
> ignores it in some places.
> 
> Avoid this by converting all remaining direct sysfs queue accesses to
> use the _sysfs_queue_path helper function. This ensures proper handling
> of partitions across the entire codebase and provides a consistent
> interface for accessing queue attributes.
> 
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

Looks reasonable to me,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>

--D

> ---
>  common/encrypt  |  7 ++-----
>  common/rc       | 12 ++++++++----
>  common/report   | 20 +++++++++++---------
>  common/zoned    |  5 +++--
>  tests/btrfs/076 | 11 +++++++----
>  tests/btrfs/237 |  5 +++--
>  tests/btrfs/273 |  4 +++-
>  tests/btrfs/283 |  4 +++-
>  8 files changed, 40 insertions(+), 28 deletions(-)
> 
> diff --git a/common/encrypt b/common/encrypt
> index f2687631..c9e0853d 100644
> --- a/common/encrypt
> +++ b/common/encrypt
> @@ -173,11 +173,8 @@ _require_hw_wrapped_key_support()
>  	local dev=$1
>  
>  	echo "Checking for HW-wrapped key support on $dev" >> $seqres.full
> -	local sysfs_dir=$(_sysfs_dev $dev)
> -	if [ ! -e $sysfs_dir/queue ]; then
> -		sysfs_dir=$sysfs_dir/..
> -	fi
> -	if [ ! -e $sysfs_dir/queue/crypto/hw_wrapped_keys ]; then
> +	local queue_path=$(_sysfs_queue_path $dev)
> +	if [ $? -ne 0 ] || [ ! -e $queue_path/crypto/hw_wrapped_keys ]; then
>  		_notrun "$dev doesn't support hardware-wrapped inline encryption keys"
>  	fi
>  
> diff --git a/common/rc b/common/rc
> index d7db5db1..9632b211 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -2502,7 +2502,11 @@ __scratch_dev_has_dax()
>  {
>  	local sysfs="/sys/block/$(_short_dev $SCRATCH_DEV)"
>  	test -e "${sysfs}/dax" && return 0
> -	test "$(cat "${sysfs}/queue/dax" 2>/dev/null)" = "1" && return 0
> +
> +	local queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
> +	if [ $? -eq 0 ]; then
> +		test "$(cat "${queue_path}/dax" 2>/dev/null)" = "1" && return 0
> +	fi
>  
>  	return 1
>  }
> @@ -2562,10 +2566,10 @@ _zone_type()
>  		echo "Usage: _zone_type <device>"
>  		_exit 1
>  	fi
> -	local sdev=`_short_dev $target`
>  
> -	if [ -e /sys/block/${sdev}/queue/zoned ]; then
> -		cat /sys/block/${sdev}/queue/zoned
> +	local queue_path=$(_sysfs_queue_path $target)
> +	if [ $? -eq 0 ] && [ -e "$queue_path/zoned" ]; then
> +		cat "$queue_path/zoned"
>  	else
>  		echo none
>  	fi
> diff --git a/common/report b/common/report
> index 7128bbeb..0d9ad78c 100644
> --- a/common/report
> +++ b/common/report
> @@ -37,16 +37,18 @@ __generate_blockdev_report_vars() {
>  
>  	test -z "$bdev" && return
>  	test -b "$bdev" || return
> -	local sysfs_bdev="$(_sysfs_dev "$bdev")"
> -
>  	REPORT_VARS["${bdev_var}_SIZE_KB"]="$(( "$(blockdev --getsz "$bdev")" / 2 ))"
> -	REPORT_VARS["${bdev_var}_ROTATIONAL"]="$(cat "$sysfs_bdev/queue/rotational" 2>/dev/null)"
> -	REPORT_VARS["${bdev_var}_DAX"]="$(cat "$sysfs_bdev/queue/dax" 2>/dev/null)"
> -	REPORT_VARS["${bdev_var}_DISCARD"]="$(sed -e 's/[1-9][0-9]*/1/g' "$sysfs_bdev/queue/discard_max_bytes" 2>/dev/null)"
> -	REPORT_VARS["${bdev_var}_WRITE_ZEROES"]="$(sed -e 's/[1-9][0-9]*/1/g' "$sysfs_bdev/queue/write_zeroes_max_bytes" 2>/dev/null)"
> -	REPORT_VARS["${bdev_var}_PHYS_BLOCK_BYTES"]="$(cat "$sysfs_bdev/queue/physical_block_size" 2>/dev/null)"
> -	REPORT_VARS["${bdev_var}_LBA_BYTES"]="$(cat "$sysfs_bdev/queue/logical_block_size" 2>/dev/null)"
> -	REPORT_VARS["${bdev_var}_ZONES"]="$(cat "$sysfs_bdev/queue/nr_zones" 2>/dev/null)"
> +
> +	local queue_path="$(_sysfs_queue_path "$bdev")"
> +	if [ $? -eq 0 ]; then
> +		REPORT_VARS["${bdev_var}_ROTATIONAL"]="$(cat "$queue_path/rotational" 2>/dev/null)"
> +		REPORT_VARS["${bdev_var}_DAX"]="$(cat "$queue_path/dax" 2>/dev/null)"
> +		REPORT_VARS["${bdev_var}_DISCARD"]="$(sed -e 's/[1-9][0-9]*/1/g' "$queue_path/discard_max_bytes" 2>/dev/null)"
> +		REPORT_VARS["${bdev_var}_WRITE_ZEROES"]="$(sed -e 's/[1-9][0-9]*/1/g' "$queue_path/write_zeroes_max_bytes" 2>/dev/null)"
> +		REPORT_VARS["${bdev_var}_PHYS_BLOCK_BYTES"]="$(cat "$queue_path/physical_block_size" 2>/dev/null)"
> +		REPORT_VARS["${bdev_var}_LBA_BYTES"]="$(cat "$queue_path/logical_block_size" 2>/dev/null)"
> +		REPORT_VARS["${bdev_var}_ZONES"]="$(cat "$queue_path/nr_zones" 2>/dev/null)"
> +	fi
>  }
>  
>  __import_report_vars() {
> diff --git a/common/zoned b/common/zoned
> index 88b81de5..89d0a061 100644
> --- a/common/zoned
> +++ b/common/zoned
> @@ -17,8 +17,9 @@ _filter_blkzone_report()
>  
>  _require_limited_active_zones() {
>      local dev=$1
> -    local sysfs=$(_sysfs_dev ${dev})
> -    local attr="${sysfs}/queue/max_active_zones"
> +    local queue_path=$(_sysfs_queue_path ${dev})
> +    [ $? -ne 0 ] && _notrun "cannot find queue path: $queue_path"
> +    local attr="${queue_path}/max_active_zones"
>  
>      [ -e "${attr}" ] || _notrun "cannot find queue/max_active_zones. Maybe non-zoned device?"
>      if [ $(cat "${attr}") == 0 ]; then
> diff --git a/tests/btrfs/076 b/tests/btrfs/076
> index c148406f..0a1e660d 100755
> --- a/tests/btrfs/076
> +++ b/tests/btrfs/076
> @@ -28,10 +28,13 @@ _fixed_by_kernel_commit 4bcbb3325513 \
>  # An extent size can be up to BTRFS_MAX_UNCOMPRESSED
>  max_extent_size=$(( 128 * 1024 ))
>  if _scratch_btrfs_is_zoned; then
> -	zone_append_max=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/zone_append_max_bytes")
> -	if [[ $zone_append_max -gt 0 && $zone_append_max -lt $max_extent_size ]]; then
> -		# Round down to PAGE_SIZE
> -		max_extent_size=$(( $zone_append_max / 4096 * 4096 ))
> +	queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
> +	if [ $? -eq 0 ]; then
> +		zone_append_max=$(cat "$queue_path/zone_append_max_bytes")
> +		if [[ $zone_append_max -gt 0 && $zone_append_max -lt $max_extent_size ]]; then
> +			# Round down to PAGE_SIZE
> +			max_extent_size=$(( $zone_append_max / 4096 * 4096 ))
> +		fi
>  	fi
>  fi
>  file_size=$(( 10 * 1024 * 1024 ))
> diff --git a/tests/btrfs/237 b/tests/btrfs/237
> index 675f4c42..07a56336 100755
> --- a/tests/btrfs/237
> +++ b/tests/btrfs/237
> @@ -44,8 +44,9 @@ get_data_bg_physical()
>  $BLKZONE_PROG report $SCRATCH_DEV | grep -q -e "nw" && \
>  	_notrun "test is unreliable on devices with conventional zones"
>  
> -sdev="$(_short_dev $SCRATCH_DEV)"
> -zone_size=$(($(cat /sys/block/${sdev}/queue/chunk_sectors) << 9))
> +queue_path=$(_sysfs_queue_path $SCRATCH_DEV) || \
> +    _notrun "Failed to get queue path: $queue_path"
> +zone_size=$(($(cat "$queue_path/chunk_sectors") << 9))
>  fssize=$((zone_size * 16))
>  devsize=$(($(_get_device_size $SCRATCH_DEV) * 1024))
>  # Create a minimal FS to kick the reclaim process
> diff --git a/tests/btrfs/273 b/tests/btrfs/273
> index 06ae5d53..60c3967b 100755
> --- a/tests/btrfs/273
> +++ b/tests/btrfs/273
> @@ -38,7 +38,9 @@ _require_btrfs_command inspect-internal dump-tree
>  # enabled.
>  _require_no_compress
>  
> -max_active=$(cat $(_sysfs_dev ${SCRATCH_DEV})/queue/max_active_zones)
> +queue_path=$(_sysfs_queue_path ${SCRATCH_DEV}) || \
> +    _notrun "Failed to get queue path: $queue_path"
> +max_active=$(cat "$queue_path/max_active_zones")
>  
>  # Fill the zones leaving the last 1MB
>  fill_active_zones() {
> diff --git a/tests/btrfs/283 b/tests/btrfs/283
> index f7a8290a..9f89fafb 100755
> --- a/tests/btrfs/283
> +++ b/tests/btrfs/283
> @@ -26,7 +26,9 @@ _wants_kernel_commit c7499a64dcf6 \
>  
>  extent_size=$(( 128 * 1024 ))
>  if _scratch_btrfs_is_zoned; then
> -	zone_append_max=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/zone_append_max_bytes")
> +	queue_path=$(_sysfs_queue_path $SCRATCH_DEV) ||
> +	    _notrun "Couldn't find queue path for zoned device"
> +	zone_append_max=$(cat "$queue_path/zone_append_max_bytes")
>  	if [[ $zone_append_max -gt 0 && $zone_append_max -lt $extent_size ]]; then
>  		_notrun "zone append max $zone_append_max is smaller than wanted extent size $extent_size"
>  	fi
> -- 
> 2.53.0
> 
> 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-10  6:36 ` [PATCH 4/6] generic/765: Ignore mkfs warning Ojaswin Mujoo
@ 2026-04-10 16:54   ` Darrick J. Wong
  2026-04-12 17:08     ` Ojaswin Mujoo
  2026-04-12 19:23     ` Zorro Lang
  2026-04-14 10:02   ` Disha Goel
  1 sibling, 2 replies; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-10 16:54 UTC (permalink / raw)
  To: Ojaswin Mujoo
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel

On Fri, Apr 10, 2026 at 12:06:04PM +0530, Ojaswin Mujoo wrote:
> This test validates atomic writes for all possible block sizes. In ext4, for
> smaller block sizes with configurations like:
> 
> export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> 
> The output can get corrupted with warnings like below because clustersize
> more than 16xbs is experimental:
> 
> + 16 times the block size is considered experimental
> 
> Hence pipe these to seqres.full to avoid false negatives.
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

Seems fine, though I think I'd rather mke2fs get patched to fix this.

I'd let the maintainer decide if he wants this, but ... I'm not sure if
he's actually going to receive this message. :/

--D

> ---
>  tests/generic/765 | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/generic/765 b/tests/generic/765
> index 09be53db..b7cc70f1 100755
> --- a/tests/generic/765
> +++ b/tests/generic/765
> @@ -64,7 +64,8 @@ test_atomic_writes()
>      local bsize=$1
>  
>      get_mkfs_opts $bsize
> -    _scratch_mkfs $mkfs_opts >> $seqres.full
> +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> +        echo "mkfs $mkfs_opts failed"
>      _scratch_mount
>  
>      test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
> -- 
> 2.53.0
> 
> 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-10 16:54   ` Darrick J. Wong
@ 2026-04-12 17:08     ` Ojaswin Mujoo
  2026-04-13  9:04       ` Ojaswin Mujoo
  2026-04-12 19:23     ` Zorro Lang
  1 sibling, 1 reply; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-12 17:08 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel

On Fri, Apr 10, 2026 at 09:54:35AM -0700, Darrick J. Wong wrote:
> On Fri, Apr 10, 2026 at 12:06:04PM +0530, Ojaswin Mujoo wrote:
> > This test validates atomic writes for all possible block sizes. In ext4, for
> > smaller block sizes with configurations like:
> > 
> > export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> > 
> > The output can get corrupted with warnings like below because clustersize
> > more than 16xbs is experimental:
> > 
> > + 16 times the block size is considered experimental
> > 
> > Hence pipe these to seqres.full to avoid false negatives.
> > 
> > Reported-by: Disha Goel <disgoel@linux.ibm.com>
> > Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> 
> Seems fine, though I think I'd rather mke2fs get patched to fix this.
> 
> I'd let the maintainer decide if he wants this, but ... I'm not sure if
> he's actually going to receive this message. :/

Hi Darrick, yes I'm preparing a quick patch for this. We might still
need this so people on older distro who wont have the e2fsprogs fix dont
see the failure.

Regards,
ojaswin

> 
> --D
> 
> > ---
> >  tests/generic/765 | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tests/generic/765 b/tests/generic/765
> > index 09be53db..b7cc70f1 100755
> > --- a/tests/generic/765
> > +++ b/tests/generic/765
> > @@ -64,7 +64,8 @@ test_atomic_writes()
> >      local bsize=$1
> >  
> >      get_mkfs_opts $bsize
> > -    _scratch_mkfs $mkfs_opts >> $seqres.full
> > +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> > +        echo "mkfs $mkfs_opts failed"
> >      _scratch_mount
> >  
> >      test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
> > -- 
> > 2.53.0
> > 
> > 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-10 16:54   ` Darrick J. Wong
  2026-04-12 17:08     ` Ojaswin Mujoo
@ 2026-04-12 19:23     ` Zorro Lang
  2026-04-13  9:09       ` Ojaswin Mujoo
  1 sibling, 1 reply; 25+ messages in thread
From: Zorro Lang @ 2026-04-12 19:23 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Ojaswin Mujoo, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel

On Fri, Apr 10, 2026 at 09:54:35AM -0700, Darrick J. Wong wrote:
> On Fri, Apr 10, 2026 at 12:06:04PM +0530, Ojaswin Mujoo wrote:
> > This test validates atomic writes for all possible block sizes. In ext4, for
> > smaller block sizes with configurations like:
> > 
> > export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> > 
> > The output can get corrupted with warnings like below because clustersize
> > more than 16xbs is experimental:
> > 
> > + 16 times the block size is considered experimental
> > 
> > Hence pipe these to seqres.full to avoid false negatives.
> > 
> > Reported-by: Disha Goel <disgoel@linux.ibm.com>
> > Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> 
> Seems fine, though I think I'd rather mke2fs get patched to fix this.
> 
> I'd let the maintainer decide if he wants this, but ... I'm not sure if
> he's actually going to receive this message. :/

Hi Darrick and folks,

I'm back.

I apologize for the silence these days. I had planned to do a release last
week, but a sudden big regional layoff and immediate cutoff of all connections
caught me completely off guard. Beyond losing my account, I lost everything on
the company servers, all my documents (including a book I was halfway through
writing), my code, and my entire environment for handling emails, patches, and
system workflows. (This is a painful reminder to never leave your things on
company server..)

Amidst the shock and grief, I am now struggling to rebuild and reconfigure my
local environment from scratch. I have redirected my zlang@kernel.org alias to
my personal email -- zorro.lang@gmail.com. *Please do not send any more emails
to my old zlang@redhat.com address*. 

Starting tomorrow, I will begin reviewing and merging last week's patches bit by
bit. I still need long time to get my environment and workflows back in order, in
the meantime, I will also be focusing my energy on finding a new job. So I
appreciate everyone's patience and understanding.

> 
> --D
> 
> > ---
> >  tests/generic/765 | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tests/generic/765 b/tests/generic/765
> > index 09be53db..b7cc70f1 100755
> > --- a/tests/generic/765
> > +++ b/tests/generic/765
> > @@ -64,7 +64,8 @@ test_atomic_writes()
> >      local bsize=$1
> >  
> >      get_mkfs_opts $bsize
> > -    _scratch_mkfs $mkfs_opts >> $seqres.full
> > +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> > +        echo "mkfs $mkfs_opts failed"

Now for this patch, I think we can have it for unfixed e2fsprogs testing,
as this test case isn't related with this e2fsprogs "bug", except you hope
to uncover it by this test case :)

Reviewed-by: Zorro Lang <zlang@kernel.org>

> >      _scratch_mount
> >  
> >      test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
> > -- 
> > 2.53.0
> > 
> > 
> 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-12 17:08     ` Ojaswin Mujoo
@ 2026-04-13  9:04       ` Ojaswin Mujoo
  2026-04-13 16:21         ` Darrick J. Wong
  0 siblings, 1 reply; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-13  9:04 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel

On Sun, Apr 12, 2026 at 10:38:18PM +0530, Ojaswin Mujoo wrote:
> On Fri, Apr 10, 2026 at 09:54:35AM -0700, Darrick J. Wong wrote:
> > On Fri, Apr 10, 2026 at 12:06:04PM +0530, Ojaswin Mujoo wrote:
> > > This test validates atomic writes for all possible block sizes. In ext4, for
> > > smaller block sizes with configurations like:
> > > 
> > > export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> > > 
> > > The output can get corrupted with warnings like below because clustersize
> > > more than 16xbs is experimental:
> > > 
> > > + 16 times the block size is considered experimental
> > > 
> > > Hence pipe these to seqres.full to avoid false negatives.
> > > 
> > > Reported-by: Disha Goel <disgoel@linux.ibm.com>
> > > Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> > 
> > Seems fine, though I think I'd rather mke2fs get patched to fix this.
> > 
> > I'd let the maintainer decide if he wants this, but ... I'm not sure if
> > he's actually going to receive this message. :/
> 
> Hi Darrick, yes I'm preparing a quick patch for this. We might still
> need this so people on older distro who wont have the e2fsprogs fix dont
> see the failure.

Hi Darrick,

Looking at it again, I am just wondering if its really an issue that
mke2fs is printing this warning to stderr. Isn't stderr the right place
for errors and warning (even non critical ones)?

Futher, mke2fs has multiple instances where we print warnings to stderr,
should we go and fix all of them as well?

Regards,
ojaswin

> 
> Regards,
> ojaswin
> 
> > 
> > --D
> > 
> > > ---
> > >  tests/generic/765 | 3 ++-
> > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/tests/generic/765 b/tests/generic/765
> > > index 09be53db..b7cc70f1 100755
> > > --- a/tests/generic/765
> > > +++ b/tests/generic/765
> > > @@ -64,7 +64,8 @@ test_atomic_writes()
> > >      local bsize=$1
> > >  
> > >      get_mkfs_opts $bsize
> > > -    _scratch_mkfs $mkfs_opts >> $seqres.full
> > > +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> > > +        echo "mkfs $mkfs_opts failed"
> > >      _scratch_mount
> > >  
> > >      test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
> > > -- 
> > > 2.53.0
> > > 
> > > 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-12 19:23     ` Zorro Lang
@ 2026-04-13  9:09       ` Ojaswin Mujoo
  0 siblings, 0 replies; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-13  9:09 UTC (permalink / raw)
  To: Darrick J. Wong, fstests, fdmanana, ritesh.list, naohiro.aota,
	wqu, Disha Goel

On Mon, Apr 13, 2026 at 03:23:51AM +0800, Zorro Lang wrote:
> On Fri, Apr 10, 2026 at 09:54:35AM -0700, Darrick J. Wong wrote:
> > On Fri, Apr 10, 2026 at 12:06:04PM +0530, Ojaswin Mujoo wrote:
> > > This test validates atomic writes for all possible block sizes. In ext4, for
> > > smaller block sizes with configurations like:
> > > 
> > > export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> > > 
> > > The output can get corrupted with warnings like below because clustersize
> > > more than 16xbs is experimental:
> > > 
> > > + 16 times the block size is considered experimental
> > > 
> > > Hence pipe these to seqres.full to avoid false negatives.
> > > 
> > > Reported-by: Disha Goel <disgoel@linux.ibm.com>
> > > Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> > 
> > Seems fine, though I think I'd rather mke2fs get patched to fix this.
> > 
> > I'd let the maintainer decide if he wants this, but ... I'm not sure if
> > he's actually going to receive this message. :/
> 
> Hi Darrick and folks,
> 
> I'm back.
> 
> I apologize for the silence these days. I had planned to do a release last
> week, but a sudden big regional layoff and immediate cutoff of all connections
> caught me completely off guard. Beyond losing my account, I lost everything on
> the company servers, all my documents (including a book I was halfway through
> writing), my code, and my entire environment for handling emails, patches, and
> system workflows. (This is a painful reminder to never leave your things on
> company server..)
> 
> Amidst the shock and grief, I am now struggling to rebuild and reconfigure my
> local environment from scratch. I have redirected my zlang@kernel.org alias to
> my personal email -- zorro.lang@gmail.com. *Please do not send any more emails
> to my old zlang@redhat.com address*. 
> 
> Starting tomorrow, I will begin reviewing and merging last week's patches bit by
> bit. I still need long time to get my environment and workflows back in order, in
> the meantime, I will also be focusing my energy on finding a new job. So I
> appreciate everyone's patience and understanding.

Hey Zorro, very sad to hear and hope you are able to sort everything out
at your end. Very grateful for your effors in maintaining fstests and always
helping with reviews and suggestions!
> 
> > 
> > --D
> > 
> > > ---
> > >  tests/generic/765 | 3 ++-
> > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/tests/generic/765 b/tests/generic/765
> > > index 09be53db..b7cc70f1 100755
> > > --- a/tests/generic/765
> > > +++ b/tests/generic/765
> > > @@ -64,7 +64,8 @@ test_atomic_writes()
> > >      local bsize=$1
> > >  
> > >      get_mkfs_opts $bsize
> > > -    _scratch_mkfs $mkfs_opts >> $seqres.full
> > > +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> > > +        echo "mkfs $mkfs_opts failed"
> 
> Now for this patch, I think we can have it for unfixed e2fsprogs testing,
> as this test case isn't related with this e2fsprogs "bug", except you hope
> to uncover it by this test case :)
> 
> Reviewed-by: Zorro Lang <zlang@kernel.org>

Thank you! 

> 
> > >      _scratch_mount
> > >  
> > >      test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
> > > -- 
> > > 2.53.0
> > > 
> > > 
> > 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-13  9:04       ` Ojaswin Mujoo
@ 2026-04-13 16:21         ` Darrick J. Wong
  2026-04-13 20:42           ` Theodore Tso
  0 siblings, 1 reply; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-13 16:21 UTC (permalink / raw)
  To: Ojaswin Mujoo
  Cc: Zorro Lang, fstests, fdmanana, ritesh.list, naohiro.aota, wqu,
	Disha Goel, linux-ext4, Theodore Ts'o

On Mon, Apr 13, 2026 at 02:34:11PM +0530, Ojaswin Mujoo wrote:
> On Sun, Apr 12, 2026 at 10:38:18PM +0530, Ojaswin Mujoo wrote:
> > On Fri, Apr 10, 2026 at 09:54:35AM -0700, Darrick J. Wong wrote:
> > > On Fri, Apr 10, 2026 at 12:06:04PM +0530, Ojaswin Mujoo wrote:
> > > > This test validates atomic writes for all possible block sizes. In ext4, for
> > > > smaller block sizes with configurations like:
> > > > 
> > > > export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> > > > 
> > > > The output can get corrupted with warnings like below because clustersize
> > > > more than 16xbs is experimental:
> > > > 
> > > > + 16 times the block size is considered experimental
> > > > 
> > > > Hence pipe these to seqres.full to avoid false negatives.
> > > > 
> > > > Reported-by: Disha Goel <disgoel@linux.ibm.com>
> > > > Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
> > > 
> > > Seems fine, though I think I'd rather mke2fs get patched to fix this.
> > > 
> > > I'd let the maintainer decide if he wants this, but ... I'm not sure if
> > > he's actually going to receive this message. :/
> > 
> > Hi Darrick, yes I'm preparing a quick patch for this. We might still
> > need this so people on older distro who wont have the e2fsprogs fix dont
> > see the failure.
> 
> Hi Darrick,
> 
> Looking at it again, I am just wondering if its really an issue that
> mke2fs is printing this warning to stderr. Isn't stderr the right place
> for errors and warning (even non critical ones)?
> 
> Futher, mke2fs has multiple instances where we print warnings to stderr,
> should we go and fix all of them as well?

"stderr" meaning "standard error", I'd say that errors are anything that
prohibits the format from completing, and only errors should go there.

We ought to kick this to the ext4 list though...

--D

> Regards,
> ojaswin
> 
> > 
> > Regards,
> > ojaswin
> > 
> > > 
> > > --D
> > > 
> > > > ---
> > > >  tests/generic/765 | 3 ++-
> > > >  1 file changed, 2 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/tests/generic/765 b/tests/generic/765
> > > > index 09be53db..b7cc70f1 100755
> > > > --- a/tests/generic/765
> > > > +++ b/tests/generic/765
> > > > @@ -64,7 +64,8 @@ test_atomic_writes()
> > > >      local bsize=$1
> > > >  
> > > >      get_mkfs_opts $bsize
> > > > -    _scratch_mkfs $mkfs_opts >> $seqres.full
> > > > +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> > > > +        echo "mkfs $mkfs_opts failed"
> > > >      _scratch_mount
> > > >  
> > > >      test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT
> > > > -- 
> > > > 2.53.0
> > > > 
> > > > 
> 

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-13 16:21         ` Darrick J. Wong
@ 2026-04-13 20:42           ` Theodore Tso
  2026-04-13 23:28             ` Darrick J. Wong
                               ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: Theodore Tso @ 2026-04-13 20:42 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Ojaswin Mujoo, Zorro Lang, fstests, fdmanana, ritesh.list,
	naohiro.aota, wqu, Disha Goel, linux-ext4

> > > > > The output can get corrupted with warnings like below because clustersize
> > > > > more than 16xbs is experimental:
> > > > > 
> > > > > + 16 times the block size is considered experimental
> > > > > 
> > > > > Hence pipe these to seqres.full to avoid false negatives.

You could also suppress the warnings using the -q option, for example:

mke2fs -Fq -t ext4 -O bigalloc,quota -b 4096 -C 131072 /tmp/foo.img 4G

> > Futher, mke2fs has multiple instances where we print warnings to stderr,
> > should we go and fix all of them as well?
> 
> "stderr" meaning "standard error", I'd say that errors are anything that
> prohibits the format from completing, and only errors should go there.

Sure, I'll accept those changes.  But adding -q will allow the test to
pass using older versions of e2fsprogs, while still allowing stderr to
go out the expected output.

					- Ted

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-13 20:42           ` Theodore Tso
@ 2026-04-13 23:28             ` Darrick J. Wong
  2026-04-15 18:52             ` Ojaswin Mujoo
  2026-04-16 15:55             ` Zorro Lang
  2 siblings, 0 replies; 25+ messages in thread
From: Darrick J. Wong @ 2026-04-13 23:28 UTC (permalink / raw)
  To: Theodore Tso
  Cc: Ojaswin Mujoo, Zorro Lang, fstests, fdmanana, ritesh.list,
	naohiro.aota, wqu, Disha Goel, linux-ext4

On Mon, Apr 13, 2026 at 04:42:15PM -0400, Theodore Tso wrote:
> > > > > > The output can get corrupted with warnings like below because clustersize
> > > > > > more than 16xbs is experimental:
> > > > > > 
> > > > > > + 16 times the block size is considered experimental
> > > > > > 
> > > > > > Hence pipe these to seqres.full to avoid false negatives.
> 
> You could also suppress the warnings using the -q option, for example:
> 
> mke2fs -Fq -t ext4 -O bigalloc,quota -b 4096 -C 131072 /tmp/foo.img 4G
> 
> > > Futher, mke2fs has multiple instances where we print warnings to stderr,
> > > should we go and fix all of them as well?
> > 
> > "stderr" meaning "standard error", I'd say that errors are anything that
> > prohibits the format from completing, and only errors should go there.
> 
> Sure, I'll accept those changes.  But adding -q will allow the test to
> pass using older versions of e2fsprogs, while still allowing stderr to
> go out the expected output.

Aha, maybe that's why I've never run into this when QA'ing fstests.

--D

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

* Re: [PATCH 1/6] ext4/061,062: Minor fixes and refactoring
  2026-04-10  6:36 ` [PATCH 1/6] ext4/061,062: Minor fixes and refactoring Ojaswin Mujoo
@ 2026-04-14  9:52   ` Disha Goel
  0 siblings, 0 replies; 25+ messages in thread
From: Disha Goel @ 2026-04-14  9:52 UTC (permalink / raw)
  To: Ojaswin Mujoo, Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

On 10/04/26 12:06 pm, Ojaswin Mujoo wrote:
> Fix 2 issues in the tests:
> 
> 1. Use fs atomic write limits instead of bdev's
> 
> The tests use block device's limits instead of limits advertised
> by filesystem. This can cause failures because block device might
> advertise a higher maximum than the FS.  Fix the tests to use
> filesystem's limits instead.
> 
> 2. Fix the test loop range
> 
> Fix the test loop start and end so that our calculations for
> blocksize, clustersize and iosize are correct.
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

Hi Ojaswin,

I've tested this patch and it works correctly. The tests now properly 
use filesystem atomic write limits instead of block device limits.

Tested-by: Disha Goel <disgoel@linux.ibm.com>

> ---
>   tests/ext4/061 | 28 ++++++++++++++++++++--------
>   tests/ext4/062 | 26 +++++++++++++++++++-------
>   2 files changed, 39 insertions(+), 15 deletions(-)
> 
> diff --git a/tests/ext4/061 b/tests/ext4/061
> index 1d61c8b0..69ddeaca 100755
> --- a/tests/ext4/061
> +++ b/tests/ext4/061
> @@ -31,10 +31,19 @@ _require_aiodio
>   FIO_LOAD=$(($(nproc) * 2 * LOAD_FACTOR))
>   SIZE=$((100*1024*1024))
>   
> -# Calculate fsblocksize as per bdev atomic write units.
> -bdev_awu_min=$(_get_atomic_write_unit_min $SCRATCH_DEV)
> -bdev_awu_max=$(_get_atomic_write_unit_max $SCRATCH_DEV)
> -bs=$(_max 4096 "$bdev_awu_min")
> +_scratch_mkfs > /dev/null 2>&1 || \
> +	_notrun "mkfs failed"
> +_try_scratch_mount || \
> +	_notrun "mount failed"
> +
> +touch $SCRATCH_MNT/f
> +
> +fs_awu_min=$(_get_atomic_write_unit_min $SCRATCH_MNT/f)
> +fs_awu_max=$(_get_atomic_write_unit_max $SCRATCH_MNT/f)
> +bs=$(_max 4096 "$fs_awu_min")
> +ps=$(_get_page_size)
> +
> +_scratch_unmount
>   
>   function create_fio_configs()
>   {
> @@ -97,10 +106,11 @@ run_test_one() {
>   	local cs=$2
>   	local iosize=$3
>   
> +	echo "== Testing: bs=$bs cs=$cs iosize=$iosize ==" >> $seqres.full
> +
>   	MKFS_OPTIONS="-O bigalloc -b $bs -C $cs"
>   	_scratch_mkfs_ext4  >> $seqres.full 2>&1 || return
>   	if _try_scratch_mount >> $seqres.full 2>&1; then
> -		echo "== Testing: bs=$bs cs=$cs iosize=$iosize ==" >> $seqres.full
>   
>   		touch $SCRATCH_MNT/f1
>   		create_fio_configs $iosize
> @@ -127,7 +137,7 @@ run_test() {
>   	# cluster sizes above 16 x blocksize are experimental so avoid them
>   	# Also, cap cluster size at 128kb to keep it reasonable for large
>   	# blocks size
> -	max_cs=$(_min $((16 * bs)) "$bdev_awu_max" $((128 * 1024)))
> +	max_cs=$(_min $((16 * bs)) "$fs_awu_max" $((128 * 1024)))
>   
>   	# Fuzz for combinations of blocksize, clustersize and
>   	# iosize that cover most of the cases
> @@ -145,8 +155,10 @@ fio_out=$tmp.fio.out
>   create_fio_configs $bs
>   _require_fio $fio_aw_config
>   
> -for ((bs=$bs; bs <= $(_get_page_size); bs = $bs << 1)); do
> -	run_test $bs
> +echo "Awu min: $fs_awu_min Awu max: $fs_awu_max" >> $seqres.full
> +
> +for ((bs=$fs_awu_min; bs <= $(_min ps fs_awu_max); bs = $bs << 1)); do
> +	run_test $bs $cs $iosize
>   done
>   
>   # success, all done
> diff --git a/tests/ext4/062 b/tests/ext4/062
> index 05cce696..56bf080c 100755
> --- a/tests/ext4/062
> +++ b/tests/ext4/062
> @@ -33,10 +33,19 @@ _require_aiodio
>   FSSIZE=$((360*1024*1024))
>   FIO_LOAD=$(($(nproc) * LOAD_FACTOR))
>   
> -# Calculate bs as per bdev atomic write units.
> -bdev_awu_min=$(_get_atomic_write_unit_min $SCRATCH_DEV)
> -bdev_awu_max=$(_get_atomic_write_unit_max $SCRATCH_DEV)
> -bs=$(_max 4096 "$bdev_awu_min")
> +_scratch_mkfs > /dev/null 2>&1 || \
> +	_notrun "mkfs failed"
> +_try_scratch_mount || \
> +	_notrun "mount failed"
> +
> +touch $SCRATCH_MNT/f
> +
> +fs_awu_min=$(_get_atomic_write_unit_min $SCRATCH_MNT/f)
> +fs_awu_max=$(_get_atomic_write_unit_max $SCRATCH_MNT/f)
> +bs=$(_max 4096 "$fs_awu_min")
> +ps=$(_get_page_size)
> +
> +_scratch_unmount
>   
>   function create_fio_configs()
>   {
> @@ -146,10 +155,11 @@ run_test_one() {
>   	local cs=$2
>   	local iosize=$3
>   
> +	echo "Testing: bs=$bs cs=$cs iosize=$iosize" >> $seqres.full
> +
>   	MKFS_OPTIONS="-O bigalloc -b $bs -C $cs"
>   	_scratch_mkfs_sized "$FSSIZE" >> $seqres.full 2>&1 || return
>   	if _try_scratch_mount >> $seqres.full 2>&1; then
> -		echo "Testing: bs=$bs cs=$cs iosize=$iosize" >> $seqres.full
>   
>   		touch $SCRATCH_MNT/f1
>   		create_fio_configs $iosize
> @@ -175,7 +185,7 @@ run_test() {
>   	# cluster sizes above 16 x blocksize are experimental so avoid them
>   	# Also, cap cluster size at 128kb to keep it reasonable for large
>   	# blocks size
> -	max_cs=$(_min $((16 * bs)) "$bdev_awu_max" $((128 * 1024)))
> +	max_cs=$(_min $((16 * bs)) "$fs_awu_max" $((128 * 1024)))
>   
>   	# Fuzz for combinations of blocksize, clustersize and
>   	# iosize that cover most of the cases
> @@ -193,7 +203,9 @@ fio_out=$tmp.fio.out
>   create_fio_configs $bs
>   _require_fio $fio_aw_config
>   
> -for ((bs=$bs; bs <= $(_get_page_size); bs = $bs << 1)); do
> +echo "Awu min: $fs_awu_min Awu max: $fs_awu_max" >> $seqres.full
> +
> +for ((bs=$fs_awu_min; bs <= $(_min ps fs_awu_max); bs = $bs << 1)); do
>   	run_test $bs $cs $iosize
>   done
>   

-- 
Regards,
Disha


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

* Re: [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions
  2026-04-10  6:36 ` [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions Ojaswin Mujoo
  2026-04-10 16:50   ` Darrick J. Wong
@ 2026-04-14  9:58   ` Disha Goel
  1 sibling, 0 replies; 25+ messages in thread
From: Disha Goel @ 2026-04-14  9:58 UTC (permalink / raw)
  To: Ojaswin Mujoo, Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

On 10/04/26 12:06 pm, Ojaswin Mujoo wrote:
> This tests checks atomic write limits reported by statx() are same as
> the ones reported by sysfs, however nvme partitions don't have the
> /sys/block/nvme0n1p1 style entry and also use the namespace's queue
> limits for atomic writes. This causes the test to fail because it
> expects /sys/block/nvme0n*p* to be present.
> 
> Hence, use the new _sysfs_queue_path() helper to get the correct
> atomic write limits
> 
> Also, fix a small typo (s/awu_min/awu_max) when printing awu limits to
> seqres.full
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

I’ve tested this patch and it resolves the issue with nvme partitions.
The test passes successfully on my nvme partition setup now.

Tested-by: Disha Goel <disgoel@linux.ibm.com>

> ---
>   tests/generic/765 | 9 +++++----
>   1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/generic/765 b/tests/generic/765
> index 8c4e0bd0..09be53db 100755
> --- a/tests/generic/765
> +++ b/tests/generic/765
> @@ -94,16 +94,17 @@ test_atomic_writes()
>       _scratch_unmount
>   }
>   
> -sys_min_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_min_bytes")
> -sys_max_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_max_bytes")
> +queue_path=$(_sysfs_queue_path $SCRATCH_DEV)
> +sys_min_write=$(cat "$queue_path/atomic_write_unit_min_bytes")
> +sys_max_write=$(cat "$queue_path/atomic_write_unit_max_bytes")
>   
>   bdev_min_write=$(_get_atomic_write_unit_min $SCRATCH_DEV)
>   bdev_max_write=$(_get_atomic_write_unit_max $SCRATCH_DEV)
>   
>   echo "sysfs awu_min $sys_min_write" >> $seqres.full
> -echo "sysfs awu_min $sys_max_write" >> $seqres.full
> +echo "sysfs awu_max $sys_max_write" >> $seqres.full
>   echo "bdev awu_min $bdev_min_write" >> $seqres.full
> -echo "bdev awu_min $bdev_max_write" >> $seqres.full
> +echo "bdev awu_max $bdev_max_write" >> $seqres.full
>   
>   # Test that statx atomic values are the same as sysfs values
>   if [ "$sys_min_write" -ne "$bdev_min_write" ]; then

-- 
Regards,
Disha


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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-10  6:36 ` [PATCH 4/6] generic/765: Ignore mkfs warning Ojaswin Mujoo
  2026-04-10 16:54   ` Darrick J. Wong
@ 2026-04-14 10:02   ` Disha Goel
  1 sibling, 0 replies; 25+ messages in thread
From: Disha Goel @ 2026-04-14 10:02 UTC (permalink / raw)
  To: Ojaswin Mujoo, Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

On 10/04/26 12:06 pm, Ojaswin Mujoo wrote:
> This test validates atomic writes for all possible block sizes. In ext4, for
> smaller block sizes with configurations like:
> 
> export MKFS_OPTIONS="-O bigalloc,quota -b 65536 -C 131072"
> 
> The output can get corrupted with warnings like below because clustersize
> more than 16xbs is experimental:
> 
> + 16 times the block size is considered experimental
> 
> Hence pipe these to seqres.full to avoid false negatives.
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

I've tested this patch and the test now runs cleanly without false
negatives from the experimental configuration warnings.

Tested-by: Disha Goel <disgoel@linux.ibm.com>

> ---
>   tests/generic/765 | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/generic/765 b/tests/generic/765
> index 09be53db..b7cc70f1 100755
> --- a/tests/generic/765
> +++ b/tests/generic/765
> @@ -64,7 +64,8 @@ test_atomic_writes()
>       local bsize=$1
>   
>       get_mkfs_opts $bsize
> -    _scratch_mkfs $mkfs_opts >> $seqres.full
> +    _scratch_mkfs $mkfs_opts &>> $seqres.full || \
> +        echo "mkfs $mkfs_opts failed"
>       _scratch_mount
>   
>       test "$FSTYP" = "xfs" && _xfs_force_bdev data $SCRATCH_MNT

-- 
Regards,
Disha


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

* Re: [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash
  2026-04-10  6:36 ` [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash Ojaswin Mujoo
  2026-04-10 16:51   ` Darrick J. Wong
@ 2026-04-14 10:05   ` Disha Goel
  1 sibling, 0 replies; 25+ messages in thread
From: Disha Goel @ 2026-04-14 10:05 UTC (permalink / raw)
  To: Ojaswin Mujoo, Zorro Lang, fstests
  Cc: djwong, fdmanana, ritesh.list, naohiro.aota, wqu

On 10/04/26 12:06 pm, Ojaswin Mujoo wrote:
> We use i as the iteration variable in the main test loop as well as some
> internal loops. Due to this clash, $i variable of main test loops was
> getting modified by the following loop in prep_mixed_mapping().
> 
> 	for ((i=0; i<num_blocks; i++)); do
> 
> If num_blocks is less than 10 (example ext4 with blocksize 4k and
> cluster size 8k) i would always be set as 3 and the main loop would
> never exit. Use local variable to fix this and while we are at it,
> rename it for clarity.
> 
> Reported-by: Disha Goel <disgoel@linux.ibm.com>
> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>

I've tested this patch and it fixes the infinite loop issue. The test 
now runs to completion without getting stuck in an infinite loop.

Tested-by: Disha Goel <disgoel@linux.ibm.com>

> ---
>   tests/generic/775 | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/generic/775 b/tests/generic/775
> index 2a4287bb..6dc005a0 100755
> --- a/tests/generic/775
> +++ b/tests/generic/775
> @@ -41,7 +41,8 @@ prep_mixed_mapping() {
>   
>   	local operations=("W" "H" "U")
>   	local num_blocks=$((awu_max / blksz))
> -	for ((i=0; i<num_blocks; i++)); do
> +	local blkno
> +	for ((blkno=0; blkno<num_blocks; blkno++)); do
>   		local index=$((RANDOM % ${#operations[@]}))
>   		local map="${operations[$index]}"
>   		local mapping="${mapping}${map}"

-- 
Regards,
Disha


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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-13 20:42           ` Theodore Tso
  2026-04-13 23:28             ` Darrick J. Wong
@ 2026-04-15 18:52             ` Ojaswin Mujoo
  2026-04-16 15:55             ` Zorro Lang
  2 siblings, 0 replies; 25+ messages in thread
From: Ojaswin Mujoo @ 2026-04-15 18:52 UTC (permalink / raw)
  To: Theodore Tso
  Cc: Darrick J. Wong, Zorro Lang, fstests, fdmanana, ritesh.list,
	naohiro.aota, wqu, Disha Goel, linux-ext4

On Mon, Apr 13, 2026 at 04:42:15PM -0400, Theodore Tso wrote:
> > > > > > The output can get corrupted with warnings like below because clustersize
> > > > > > more than 16xbs is experimental:
> > > > > > 
> > > > > > + 16 times the block size is considered experimental
> > > > > > 
> > > > > > Hence pipe these to seqres.full to avoid false negatives.
> 
> You could also suppress the warnings using the -q option, for example:
> 
> mke2fs -Fq -t ext4 -O bigalloc,quota -b 4096 -C 131072 /tmp/foo.img 4G
> 
> > > Futher, mke2fs has multiple instances where we print warnings to stderr,
> > > should we go and fix all of them as well?
> > 
> > "stderr" meaning "standard error", I'd say that errors are anything that
> > prohibits the format from completing, and only errors should go there.
> 
> Sure, I'll accept those changes.  But adding -q will allow the test to
> pass using older versions of e2fsprogs, while still allowing stderr to
> go out the expected output.

Okay cool, I'll send the patches.

thanks,
ojaswin

> 
> 					- Ted

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

* Re: [PATCH 4/6] generic/765: Ignore mkfs warning
  2026-04-13 20:42           ` Theodore Tso
  2026-04-13 23:28             ` Darrick J. Wong
  2026-04-15 18:52             ` Ojaswin Mujoo
@ 2026-04-16 15:55             ` Zorro Lang
  2 siblings, 0 replies; 25+ messages in thread
From: Zorro Lang @ 2026-04-16 15:55 UTC (permalink / raw)
  To: Theodore Tso
  Cc: Darrick J. Wong, Ojaswin Mujoo, Zorro Lang, fstests, fdmanana,
	ritesh.list, naohiro.aota, wqu, Disha Goel, linux-ext4

On Mon, Apr 13, 2026 at 04:42:15PM -0400, Theodore Tso wrote:
> > > > > > The output can get corrupted with warnings like below because clustersize
> > > > > > more than 16xbs is experimental:
> > > > > > 
> > > > > > + 16 times the block size is considered experimental
> > > > > > 
> > > > > > Hence pipe these to seqres.full to avoid false negatives.
> 
> You could also suppress the warnings using the -q option, for example:
> 
> mke2fs -Fq -t ext4 -O bigalloc,quota -b 4096 -C 131072 /tmp/foo.img 4G
> 
> > > Futher, mke2fs has multiple instances where we print warnings to stderr,
> > > should we go and fix all of them as well?
> > 
> > "stderr" meaning "standard error", I'd say that errors are anything that
> > prohibits the format from completing, and only errors should go there.
> 
> Sure, I'll accept those changes.  But adding -q will allow the test to
> pass using older versions of e2fsprogs, while still allowing stderr to
> go out the expected output.

Aha, good point! Thanks Ted :)

> 
> 					- Ted
> 

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

end of thread, other threads:[~2026-04-16 15:55 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-10  6:36 [PATCH v2 0/6] Atomic write test fixes & refactoring Ojaswin Mujoo
2026-04-10  6:36 ` [PATCH 1/6] ext4/061,062: Minor fixes and refactoring Ojaswin Mujoo
2026-04-14  9:52   ` Disha Goel
2026-04-10  6:36 ` [PATCH 2/6] common/rc: Add _sysfs_queue_path helper with partition support Ojaswin Mujoo
2026-04-10 16:50   ` Darrick J. Wong
2026-04-10  6:36 ` [PATCH 3/6] generic/765: Fix sysfs queue path for nvme partitions Ojaswin Mujoo
2026-04-10 16:50   ` Darrick J. Wong
2026-04-14  9:58   ` Disha Goel
2026-04-10  6:36 ` [PATCH 4/6] generic/765: Ignore mkfs warning Ojaswin Mujoo
2026-04-10 16:54   ` Darrick J. Wong
2026-04-12 17:08     ` Ojaswin Mujoo
2026-04-13  9:04       ` Ojaswin Mujoo
2026-04-13 16:21         ` Darrick J. Wong
2026-04-13 20:42           ` Theodore Tso
2026-04-13 23:28             ` Darrick J. Wong
2026-04-15 18:52             ` Ojaswin Mujoo
2026-04-16 15:55             ` Zorro Lang
2026-04-12 19:23     ` Zorro Lang
2026-04-13  9:09       ` Ojaswin Mujoo
2026-04-14 10:02   ` Disha Goel
2026-04-10  6:36 ` [PATCH 5/6] generic/775: Fix an infinite loop due to variable name clash Ojaswin Mujoo
2026-04-10 16:51   ` Darrick J. Wong
2026-04-14 10:05   ` Disha Goel
2026-04-10  6:36 ` [PATCH 6/6] treewide: Use _sysfs_queue_path helper in all queue access locations Ojaswin Mujoo
2026-04-10 16:52   ` Darrick J. Wong

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