filesetup: use zonerange for map and LFSR with zonemode=strided
authorVincent Fu <vincent.fu@wdc.com>
Tue, 15 Oct 2019 14:29:57 +0000 (10:29 -0400)
committerJens Axboe <axboe@kernel.dk>
Tue, 15 Oct 2019 15:14:51 +0000 (09:14 -0600)
When a random map is enabled, cover only the current zone when run with
zonemode=strided. This ensures that when we reach the end of the zone we
wrap around back into the current zone instead of accessing blocks
outside of the zone.

In addition, when an LFSR is used, constrain the blocks generated to the
current zone. Previously, the LFSR random_generator would ignore the
strided zonemode setting.

Fixes: https://github.com/axboe/fio/issues/809
Signed-off-by: Jens Axboe <axboe@kernel.dk>
filesetup.c

index a439b6d62a876ecdb1f67d922a14f98cb9e5690c..1d3094c14796509c4f26a5b928bba3975dd8dc74 100644 (file)
@@ -1338,6 +1338,9 @@ bool init_random_map(struct thread_data *td)
        for_each_file(td, f, i) {
                uint64_t fsize = min(f->real_file_size, f->io_size);
 
+               if (td->o.zone_mode == ZONE_MODE_STRIDED)
+                       fsize = td->o.zone_range;
+
                blocks = fsize / (unsigned long long) td->o.rw_min_bs;
 
                if (check_rand_gen_limits(td, f, blocks))