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@xxxxxxx> --- t/zbd/test-zbd-support | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/t/zbd/test-zbd-support b/t/zbd/test-zbd-support index cdaa0574..a3d37a7d 100755 --- a/t/zbd/test-zbd-support +++ b/t/zbd/test-zbd-support @@ -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=() -- 2.40.1