Sometimes while running a mix of sequential and random I/O's the generated sequential offset is outside the I/O region. This usually happens if the previous I/O is the last block in the region and thus results in this sequential I/O's offset to be just outside the region. With this fix, fio generates a random offset within the I/O region. This fixes #1486 Signed-off-by: Ankit Kumar <ankit.kumar@xxxxxxxxxxx> --- io_u.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/io_u.c b/io_u.c index 8035f4b7..e49b1b29 100644 --- a/io_u.c +++ b/io_u.c @@ -432,8 +432,11 @@ static int get_next_block(struct thread_data *td, struct io_u *io_u, *is_random = false; io_u_set(td, io_u, IO_U_F_BUSY_OK); ret = get_next_seq_offset(td, f, ddir, &offset); - if (ret) + if (ret || offset >= f->io_size) { ret = get_next_rand_block(td, f, ddir, &b); + offset = -1ULL; + *is_random = true; + } } } else { *is_random = false; -- 2.17.1