When test target zoned block devices have max_open_zones or max_active_zones limit, high queue depth sequential write in the test case zbd/005 may result in parallel writes to number of zones beyond the limit. This causes I/O errors. To avoid the errors, specify the limit to fio command in the test case. Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx> Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@xxxxxxx> --- tests/zbd/005 | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/zbd/005 b/tests/zbd/005 index 1e8962c..a7fb175 100755 --- a/tests/zbd/005 +++ b/tests/zbd/005 @@ -28,7 +28,8 @@ cleanup_fallback_device() { test_device() { local -i zone_idx local -i offset - local zbdmode="" + local -i moaz + local -a zbdmode=() echo "Running ${TEST_NAME}" @@ -36,11 +37,13 @@ test_device() { zone_idx=$(_find_first_sequential_zone) || return $? offset=$((ZONE_STARTS[zone_idx] * 512)) + moaz=$(_test_dev_max_open_active_zones) # If the test target zone has smaller zone capacity than zone size, - # enable zonemode=zbd to have fio handle the zone capacity limit. - if ((ZONE_CAPS[zone_idx] != ZONE_LENGTHS[zone_idx])); then - zbdmode="--zonemode=zbd" + # or if the test target device has max open/active zones limit, enable + # zonemode=zbd and specify the limit to handle the zone restrictions. + if ((ZONE_CAPS[zone_idx] != ZONE_LENGTHS[zone_idx])) || ((moaz)); then + zbdmode=("--zonemode=zbd" "--max_open_zones=${moaz}") fi blkzone reset -o "${ZONE_STARTS[zone_idx]}" "${TEST_DEV}" @@ -51,7 +54,7 @@ test_device() { FIO_PERF_FIELDS=("write io" "write iops") _fio_perf --filename="${TEST_DEV}" --name zbdwo --rw=write --direct=1 \ --ioengine=libaio --iodepth=128 --bs=256k \ - --offset="${offset}" ${zbdmode} + --offset="${offset}" "${zbdmode[@]}" _put_blkzone_report -- 2.28.0