> -----Original Message----- > From: fio-owner@xxxxxxxxxxxxxxx <fio-owner@xxxxxxxxxxxxxxx> On Behalf > Of Alexey Dobriyan > Sent: Thursday, August 13, 2020 12:37 PM > To: axboe@xxxxxxxxx > Cc: fio@xxxxxxxxxxxxxxx; Damien Le Moal <Damien.LeMoal@xxxxxxx> > Subject: [PATCH] zbd: use ->min_zone, ->max_zone in more places > > Check that ->min_zone is less than ->max_zone. > This assert found one bug here. > > Use it in more places, now that it was added. > > Signed-off-by: Alexey Dobriyan (SK hynix) <adobriyan@xxxxxxxxx> > --- Works fine for me. Nice cleanup! Reviewed-by: Dmitry Fomichev <dmitry.fomichev@xxxxxxx> > > zbd.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > --- a/zbd.c > +++ b/zbd.c > @@ -319,6 +319,7 @@ static bool zbd_verify_sizes(void) > > f->min_zone = zbd_zone_idx(f, f->file_offset); > f->max_zone = zbd_zone_idx(f, f->file_offset + f- > >io_size); > + assert(f->min_zone < f->max_zone); > } > } > > @@ -839,9 +840,8 @@ static uint64_t zbd_process_swd(const struct fio_file > *f, enum swd_action a) > struct fio_zone_info *zb, *ze, *z; > uint64_t swd = 0; > > - zb = &f->zbd_info->zone_info[zbd_zone_idx(f, f->file_offset)]; > - ze = &f->zbd_info->zone_info[zbd_zone_idx(f, f->file_offset + > - f->io_size)]; > + zb = &f->zbd_info->zone_info[f->min_zone]; > + ze = &f->zbd_info->zone_info[f->max_zone]; > for (z = zb; z < ze; z++) { > pthread_mutex_lock(&z->mutex); > swd += z->wp - z->start; > @@ -1175,7 +1175,7 @@ zbd_find_zone(struct thread_data *td, struct io_u > *io_u, > struct fio_file *f = io_u->file; > struct fio_zone_info *z1, *z2; > const struct fio_zone_info *const zf = > - &f->zbd_info->zone_info[zbd_zone_idx(f, f->file_offset)]; > + &f->zbd_info->zone_info[f->min_zone]; > > /* > * Skip to the next non-empty zone in case of sequential I/O and to > @@ -1482,8 +1482,7 @@ enum io_u_action zbd_adjust_block(struct > thread_data *td, struct io_u *io_u) > if (range < min_bs || > ((!td_random(td)) && (io_u->offset + min_bs > zb->wp))) { > pthread_mutex_unlock(&zb->mutex); > - zl = &f->zbd_info->zone_info[zbd_zone_idx(f, > - f->file_offset + f->io_size)]; > + zl = &f->zbd_info->zone_info[f->max_zone]; > zb = zbd_find_zone(td, io_u, zb, zl); > if (!zb) { > dprint(FD_ZBD,