Re: [PATCH 2/4] generic/765: Fix sysfs path for nvme partitions

"Darrick J. Wong" <[email protected]>
Newsgroups org.kernel.vger.fstests
Message-ID <20260401140829.GG6212@frogsfrogsfrogs>
On Wed, Apr 01, 2026 at 04:10:48PM +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, in this case, just check against the parent namespace.
> 
> Reported-by: Disha Goel <[email protected]>
> Signed-off-by: Ojaswin Mujoo <[email protected]>
> ---
>  tests/generic/765 | 23 +++++++++++++++++++----
>  1 file changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/generic/765 b/tests/generic/765
> index 8c4e0bd0..4c768783 100755
> --- a/tests/generic/765
> +++ b/tests/generic/765
> @@ -94,16 +94,31 @@ 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")

I see this show up in a few other places:

$ git grep /sys/block
common/dmlogwrites:64:  local sysfs="/sys/block/$(_short_dev $1)"
common/rc:2567: local sysfs="/sys/block/$(_short_dev $SCRATCH_DEV)"
common/rc:2631: if [ -e /sys/block/${sdev}/queue/zoned ]; then
common/rc:2632:         cat /sys/block/${sdev}/queue/zoned
common/scsi_debug:67:   device=`grep -wl scsi_debug /sys/block/sd*/device/model | awk -F / '{print $4}'`
tests/btrfs/076:31:     zone_append_max=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/zone_append_max_bytes")
tests/btrfs/237:48:zone_size=$(($(cat /sys/block/${sdev}/queue/chunk_sectors) << 9))
tests/btrfs/283:29:     zone_append_max=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/zone_append_max_bytes")
vests/generic/108:20:   echo running > /sys/block/`_short_dev $SCSI_DEBUG_DEV`/device/state
tests/generic/108:81:echo offline > /sys/block/`_short_dev $SCSI_DEBUG_DEV`/device/state
tests/generic/730:56:echo 1 > /sys/block/$(_short_dev $SCSI_DEBUG_DEV)/device/delete
tests/generic/731:49:echo 1 > /sys/block/`_short_dev $SCSI_DEBUG_DEV`/device/delete
tests/generic/765:97:sys_min_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_min_bytes")
tests/generic/765:98:sys_max_write=$(cat "/sys/block/$(_short_dev $SCRATCH_DEV)/queue/atomic_write_unit_max_bytes")

So I wonder if the same problem exists there as well?

(Well, maybe not the scsi-debug users)

> +# Get the right sysfs dev for the atomic write device
> +get_aw_dev() {
> +    local dev
> +    dev=$(_short_dev "$1")
> +
> +    # Special case: nvme partitions don't have the /sys/block/nvme0n1p1 style
> +    # entry and also use the namespace's queue limits for atomic writes, hence
> +    # just return the parent namespace.
> +    if [[ $dev == nvme* ]]; then
> +        echo "${dev%%p[0-9]*}"
> +    else
> +        echo "$dev"
> +    fi
> +}

Perhaps this ought to turn into a common helper to fix them all?

_sys_block_path() {
	local dev=$(_short_dev "$1")

	# Special case: nvme partitions don't have the /sys/block/nvme0n1p1 style
	# entry and also use the namespace's queue limits for atomic writes, hence
	# just return the parent namespace.
	if [[ $dev == nvme* ]]; then
		echo "/sys/block/${dev%%p[0-9]*}"
	else
		echo "/sys/block/$dev"
	fi
}

sys_min_write=$(_sys_block_path $SCRATCH_DEV)/queue/<whatever>)

Also, don't some of the other block devices follow this "partition has
pXXX suffix" pattern as well?  Not that I have a clue why scsi doesn't
follow that pattern or even which part of sd.c triggers the sdaX
behavior. :/

--D

> +
> +sys_min_write=$(cat "/sys/block/$(get_aw_dev $SCRATCH_DEV)/queue/atomic_write_unit_min_bytes")
> +sys_max_write=$(cat "/sys/block/$(get_aw_dev $SCRATCH_DEV)/queue/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
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.