On 2020/06/26 2:41, Krishna Kanth Reddy wrote: > From: Ankit Kumar <ankit.kumar@xxxxxxxxxxx> > > The zone append command uses the write path with offset as > start of the zone. Upon successful completion, multiple of > sectors relative to the zone's start offset, where the data > has been placed is returned. > > Signed-off-by: Krishna Kanth Reddy <krish.reddy@xxxxxxxxxxx> > --- > engines/libaio.c | 20 +++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > > diff --git a/engines/libaio.c b/engines/libaio.c > index 398fdf9..4ffe831 100644 > --- a/engines/libaio.c > +++ b/engines/libaio.c > @@ -123,7 +123,13 @@ static int fio_libaio_prep(struct thread_data *td, struct io_u *io_u) > if (o->nowait) > iocb->aio_rw_flags |= RWF_NOWAIT; > } else if (io_u->ddir == DDIR_WRITE) { > - io_prep_pwrite(iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset); > + if ((td->o.zone_mode == ZONE_MODE_ZBD) && td->o.zone_append) { > + io_prep_pwrite(iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->zone_start_offset); > + } No need for the added braces. And see my comment in the previous patch about zone_start_offset. You can calculate it from io_u->offset. > + else > + io_prep_pwrite(iocb, f->fd, io_u->xfer_buf, io_u->xfer_buflen, io_u->offset); > + if (td->o.zone_append) > + iocb->aio_rw_flags |= RWF_ZONE_APPEND; > if (o->nowait) > iocb->aio_rw_flags |= RWF_NOWAIT; > } else if (ddir_sync(io_u->ddir)) > @@ -228,6 +234,18 @@ static int fio_libaio_getevents(struct thread_data *td, unsigned int min, > } else { > r = io_getevents(ld->aio_ctx, actual_min, > max, ld->aio_events + events, lt); > + if (td->o.zone_mode == ZONE_MODE_ZBD) { > + struct io_event *ev; > + struct io_u *io_u; Add a blank line after declarations please. > + for (unsigned event = 0; event < r; event++) { Better declare event above instead of here. I know C allows it, but this looks like C++ to me :) > + ev = ld->aio_events + event; > + io_u = container_of(ev->obj, struct io_u, iocb); > + if (td->o.zone_append > + && td->o.do_verify && td->o.verify > + && (io_u->ddir == DDIR_WRITE)) So this is done only if verify is on ? Then why do the loop at all if verify is off ? Move the "td->o.zone_append && td->o.do_verify && td->o.verify" condition outside the loop. > + io_u->ipo->offset = io_u->zone_start_offset + (ev->res2 << 9); same here about start offset. > + } > + } > } > if (r > 0) > events += r; > -- Damien Le Moal Western Digital Research