Current fio implementation does not handle zones in closed condition as write target zones. When the device has max_active_zones limit, the write to other zones may cause errors by exceeding the limit, since the zones in closed condition consume the device resource for the max_active_zones limit. To avoid the error, handle the zones in closed condition as write target in same manner as the zones in open condition when the device has the max_active_zones limit. At the job start, check each condition of the zones in the IO ranges and if it has closed condition, pass the zone to zbd_write_zones_get() in same manner as the zones in open condition. Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> --- zbd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zbd.c b/zbd.c index 9743b60e..3069ad1d 100644 --- a/zbd.c +++ b/zbd.c @@ -1255,7 +1255,11 @@ int zbd_setup_files(struct thread_data *td) for (zi = f->min_zone; zi < f->max_zone; zi++) { z = &zbd->zone_info[zi]; if (z->cond != ZBD_ZONE_COND_IMP_OPEN && - z->cond != ZBD_ZONE_COND_EXP_OPEN) + z->cond != ZBD_ZONE_COND_EXP_OPEN && + z->cond != ZBD_ZONE_COND_CLOSED) + continue; + if (!zbd->max_active_zones && + z->cond == ZBD_ZONE_COND_CLOSED) continue; if (__zbd_write_zone_get(td, f, z)) continue; -- 2.40.1