t/zbd: test write zone accounting of trim workload
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Thu, 8 Jun 2023 07:06:08 +0000 (16:06 +0900)
committerVincent Fu <vincent.fu@samsung.com>
Thu, 8 Jun 2023 18:39:07 +0000 (14:39 -0400)
Recent commit fixed the bug of the write zone accounting of trim
workload. Add a test case which confirms the fix.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
t/zbd/test-zbd-support

index cdaa0574820917469cc53598d3c288d977e62610..a3d37a7d9527a70568f7d7a5beb1dec7bf1a61f4 100755 (executable)
@@ -1389,6 +1389,30 @@ test64() {
                       >> "${logfile}.${test_number}" 2>&1 || return $?
 }
 
+# Test open zone accounting handles trim workload correctly. Prepare open zones
+# as many as max_open_zones=4. Trim one of the 4 zones. Then write to another
+# zone and check the write amount is expected size.
+test65() {
+       local off capacity
+
+       [ -n "$is_zbd" ] && reset_zone "$dev" -1
+
+       off=$((first_sequential_zone_sector * 512))
+       capacity=$(total_zone_capacity 1 $off "$dev")
+       run_fio --zonemode=zbd --direct=1 --zonesize="$zone_size" --thread=1 \
+               --filename="$dev" --group_reporting=1 --max_open_zones=4 \
+               "$(ioengine "psync")" \
+               --name="prep_open_zones" --rw=randwrite --offset="$off" \
+               --size="$((zone_size * 4))" --bs=4096 --io_size="$zone_size" \
+               --name=trimjob --wait_for="prep_open_zones" --rw=trim \
+               --bs="$zone_size" --offset="$off" --size="$zone_size" \
+               --name=write --wait_for="trimjob" --rw=write --bs=4096 \
+               --offset="$((off + zone_size * 4))" --size="$zone_size" \
+               >> "${logfile}.${test_number}" 2>&1
+
+       check_written $((zone_size + capacity))
+}
+
 SECONDS=0
 tests=()
 dynamic_analyzer=()