t/zbd: add test case to check max_active_zones limit error message
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Wed, 19 Jul 2023 10:57:51 +0000 (19:57 +0900)
committerVincent Fu <vincent.fu@samsung.com>
Thu, 20 Jul 2023 13:52:37 +0000 (09:52 -0400)
The recent fio change introduced a new error message to indicate
max_active_zones limit error of zoned block devices. Add a test case to
check the error message is reported.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20230719105756.553146-9-shinichiro.kawasaki@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
t/zbd/test-zbd-support

index 6d44faf1ac1deb7859ff31b1c9afb34b2144aefb..1d1d389baf093efb1fe1fa4c867d4f01a607c25d 100755 (executable)
@@ -1464,6 +1464,34 @@ test66() {
                       >> "${logfile}.${test_number}" 2>&1
 }
 
+# Test max_active_zones limit failure is reported with good error message.
+test67() {
+       local i off
+
+       require_zbd || return $SKIP_TESTCASE
+       require_max_active_zones 2 || return $SKIP_TESTCASE
+       require_max_open_zones "${max_active_zones}" || return $SKIP_TESTCASE
+       require_seq_zones $((max_active_zones + 1)) || return $SKIP_TESTCASE
+
+       reset_zone "$dev" -1
+
+       # Prepare max_active_zones in open condition.
+       off=$((first_sequential_zone_sector * 512))
+       run_fio --name=w --filename="$dev" --zonemod=zbd --direct=1 \
+               --offset=$((off)) --zonesize="${zone_size}" --rw=randwrite \
+               --bs=4096 --size="$((zone_size * max_active_zones))" \
+               --io_size="${zone_size}" "$(ioengine "psync")" \
+               >> "${logfile}.${test_number}" 2>&1 || return $?
+
+       # Write to antoher zone and trigger max_active_zones limit error.
+       off=$((off + zone_size * max_active_zones))
+       run_one_fio_job --zonemod=zbd --direct=1 "$(ioengine "psync")" \
+                       --rw=write --bs=$min_seq_write_size --offset=$((off)) \
+                       --size=$((zone_size)) --zonesize="${zone_size}" \
+                       >> "${logfile}.${test_number}" 2>&1 && return $?
+       grep -q 'Exceeded max_active_zones limit' "${logfile}.${test_number}"
+}
+
 SECONDS=0
 tests=()
 dynamic_analyzer=()