On 10/25/25 21:55, Chaitanya Kulkarni wrote: > (what >> BLK_TC_SHIFT) & ~((u64)BLK_TC_END_V1 * 2 - 1)))
Following is the test I used :- tests/blktrace/001 | 97 ++++++++++++++++++++++++++++++++++++++++++ tests/blktrace/001.out | 2 + tests/blktrace/rc | 11 +++++ 3 files changed, 110 insertions(+) create mode 100755 tests/blktrace/001 create mode 100644 tests/blktrace/001.out create mode 100644 tests/blktrace/rc diff --git a/tests/blktrace/001 b/tests/blktrace/001 new file mode 100755 index 0000000..fa72f89 --- /dev/null +++ b/tests/blktrace/001 @@ -0,0 +1,97 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2025 Chaitanya Kulkarni <[email protected]> +# +# Regression test for blktrace false positive WARNING on zone management +# commands. +# +# Bug: https://syzkaller.appspot.com/bug?extid=153e64c0aa875d7e4c37 +# Location: kernel/trace/blktrace.c:367-368 +# +# The bug triggers a WARNING when zone management commands (zone open/close/ +# finish/reset) are traced with blktrace on V1 version. This is a false +# positive that should be fixed. + +. tests/blktrace/rc +. common/null_blk + +DESCRIPTION="blktrace zone management command tracing" +QUICK=1 + +requires() { + _have_program blkzone + _have_null_blk + _have_module_param null_blk zoned +} + +test() { + echo "Running ${TEST_NAME}" + + local blktrace_pid + local warning_count + local device + + # Initialize null_blk with no default devices + if ! _init_null_blk nr_devices=0; then + return 1 + fi + + # Create zoned null_blk device via configfs + # 8 zones, 1GB total, 128MB per zone, no conventional zones + if ! _configure_null_blk nullb0 \ + memory_backed=1 \ + zone_size=128 \ + zone_nr_conv=0 \ + size=1024 \ + zoned=1 \ + power=1; then + return 1 + fi + + device=/dev/nullb0 + + # Verify it's a zoned device + local zoned_mode + zoned_mode=$(cat /sys/block/nullb0/queue/zoned) + if [[ "$zoned_mode" != "host-managed" ]]; then + echo "Device is not zoned (mode: $zoned_mode)" + _exit_null_blk + return 1 + fi + + # Clear dmesg to isolate test output + dmesg -C 2>/dev/null || true + + # Start blktrace + blktrace -d "${device}" -o trace >> "$FULL" 2>&1 & + blktrace_pid=$! + sleep 2 + + # Verify blktrace started + if ! ps -p $blktrace_pid > /dev/null 2>&1; then + echo "blktrace failed to start" + _exit_null_blk + return 1 + fi + + # Issue zone open command for all zones (triggers bug if present) + blkzone open "${device}" >> "$FULL" 2>&1 + + sleep 1 + + # Stop blktrace + kill $blktrace_pid 2>/dev/null + wait $blktrace_pid 2>/dev/null || true + + # Check for WARNING (bug present if WARNING found) + warning_count=$(dmesg | grep -c "WARNING.*blktrace.c:367" || true) + + if [[ $warning_count -gt 0 ]]; then + echo "WARNING: blktrace bug detected at blktrace.c:367" + dmesg | grep -A 10 "WARNING.*blktrace.c:367" >> "$FULL" + fi + + _exit_null_blk + + echo "Test complete" +} diff --git a/tests/blktrace/001.out b/tests/blktrace/001.out new file mode 100644 index 0000000..a122a65 --- /dev/null +++ b/tests/blktrace/001.out @@ -0,0 +1,2 @@ +Running blktrace/001 +Test complete diff --git a/tests/blktrace/rc b/tests/blktrace/rc new file mode 100644 index 0000000..019ff7d --- /dev/null +++ b/tests/blktrace/rc @@ -0,0 +1,11 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2025 Chaitanya Kulkarni <[email protected]> +# +# Tests for blktrace infrastructure + +. common/rc + +group_requires() { + _have_root && _have_blktrace && _have_program blkparse +} -- 2.40.0
