t/zbd: add test case to check zones in closed condition
[fio.git] / t / zbd / test-zbd-support
index eed3d00d73cd305187f1b3a578fc38fd31e6e62f..6d44faf1ac1deb7859ff31b1c9afb34b2144aefb 100755 (executable)
@@ -1427,6 +1427,43 @@ test65() {
        check_written $((zone_size + capacity))
 }
 
+# Test closed zones are handled as open zones. This test case requires zoned
+# block devices which has same max_open_zones and max_active_zones.
+test66() {
+       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 * 16)) || return $SKIP_TESTCASE
+
+       reset_zone "$dev" -1
+
+       # Prepare max_active_zones in closed 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 $?
+       for ((i = 0; i < max_active_zones; i++)); do
+               close_zone "$dev" $((off / 512)) || return $?
+               off=$((off + zone_size))
+       done
+
+       # Run random write to the closed zones and empty zones. This confirms
+       # that fio handles closed zones as write target open zones. Otherwise,
+       # fio writes to the empty zones and hit the max_active_zones limit.
+       off=$((first_sequential_zone_sector * 512))
+       run_one_fio_job --zonemod=zbd --direct=1 \
+                      "$(ioengine "psync")" --rw=randwrite --bs=4096 \
+                      --max_open_zones="$max_active_zones" --offset=$((off)) \
+                      --size=$((max_active_zones * 16 * zone_size)) \
+                      --io_size=$((zone_size)) --zonesize="${zone_size}" \
+                      --time_based --runtime=5s \
+                      >> "${logfile}.${test_number}" 2>&1
+}
+
 SECONDS=0
 tests=()
 dynamic_analyzer=()