filesetup: honor the offset option
authorVincent Fu <vincent.fu@wdc.com>
Wed, 11 Sep 2019 14:56:40 +0000 (10:56 -0400)
committerJens Axboe <axboe@kernel.dk>
Wed, 11 Sep 2019 15:00:17 +0000 (09:00 -0600)
Commands like the following do not honor the value given by the offset
option:

./fio --name=test --rw=randread --runtime=10s --offset=90% --time_based --ioengine=null --size=1T --norandommap --randrepeat=0
./fio --name=test --size=8k --offset=4k

In the random case, eventually a random offset will be generated beyond
the 1T file size, leading to a failure.

In the sequential case, a 12k file will be created despite size
specifying the 8k end boundary.

This patch modifies setup_files() so that f->io_size incorporates the
offset for cases like those above.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
filesetup.c

index 7904d187e5f3ce394ce8707fee05d02562a02530..b8d1d83899cea588a40af2ed126adf150f26fa4c 100644 (file)
@@ -1047,7 +1047,7 @@ int setup_files(struct thread_data *td)
                         * doesn't divide nicely with the min blocksize,
                         * make the first files bigger.
                         */
-                       f->io_size = fs;
+                       f->io_size = fs - f->file_offset;
                        if (nr_fs_extra) {
                                nr_fs_extra--;
                                f->io_size += bs;