+ /*
+ * If zone_size > zone_range, then maintain the same zone until
+ * zone_bytes >= zone_size.
+ */
+ if (f->last_pos[io_u->ddir] >= (f->file_offset + td->o.zone_range)) {
+ dprint(FD_IO, "io_u maintain zone offset=%" PRIu64 "/last_pos=%" PRIu64 "\n",
+ f->file_offset, f->last_pos[io_u->ddir]);
+ f->last_pos[io_u->ddir] = f->file_offset;
+ }
+
+ /*
+ * For random: if 'norandommap' is not set and zone_size > zone_range,
+ * map needs to be reset as it's done with zone_range everytime.
+ */
+ if ((td->zone_bytes % td->o.zone_range) == 0) {
+ fio_file_reset(td, f);
+ }
+}
+
+static int fill_io_u(struct thread_data *td, struct io_u *io_u)
+{
+ bool is_random;
+
+ if (td_ioengine_flagged(td, FIO_NOIO))
+ goto out;
+
+ set_rw_ddir(td, io_u);
+
+ /*
+ * fsync() or fdatasync() or trim etc, we are done
+ */
+ if (!ddir_rw(io_u->ddir))
+ goto out;
+
+ /*
+ * When file is zoned zone_range is always positive
+ */
+ if (td->o.zone_range) {
+ __fill_io_u_zone(td, io_u);
+ }
+