On Fri, Jul 07, 2023 at 12:14:54PM +0900, Shin'ichiro Kawasaki wrote: > 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 > Reviewed-by: Niklas Cassel <niklas.cassel@xxxxxxx>