X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=io_u.c;h=a963441a9d3e6baabf4e312146638d90cb46f708;hp=cab09800de5afea6e1e3d749f97ef33139faca6e;hb=273f8c912d981439049d9b21aa048aaeaa323c5d;hpb=b4c5e1acb5a7964f858e2b41c1ae07b1afc0f4ea diff --git a/io_u.c b/io_u.c index cab09800..a963441a 100644 --- a/io_u.c +++ b/io_u.c @@ -118,7 +118,7 @@ static int get_next_rand_offset(struct thread_data *td, struct fio_file *f, /* * calculate map offset and chec if it's free */ - rb = *b + (f->file_offset / td->o.min_bs[ddir]); + rb = *b; if (random_map_free(td, f, rb)) return 0; @@ -186,7 +186,21 @@ static unsigned int get_next_buflen(struct thread_data *td, struct io_u *io_u) buflen = td->o.min_bs[ddir]; else { r = os_random_long(&td->bsrange_state); - buflen = (unsigned int) (1 + (double) (td->o.max_bs[ddir] - 1) * r / (RAND_MAX + 1.0)); + if (!td->o.bssplit_nr) + buflen = (unsigned int) (1 + (double) (td->o.max_bs[ddir] - 1) * r / (RAND_MAX + 1.0)); + else { + long perc = 0; + unsigned int i; + + for (i = 0; i < td->o.bssplit_nr; i++) { + struct bssplit *bsp = &td->o.bssplit[i]; + + buflen = bsp->bs; + perc += bsp->perc; + if (r <= ((LONG_MAX / 100L) * perc)) + break; + } + } if (!td->o.bs_unaligned) buflen = (buflen + td->o.min_bs[ddir] - 1) & ~(td->o.min_bs[ddir] - 1); } @@ -763,6 +777,7 @@ static void io_completed(struct thread_data *td, struct io_u *io_u, io_u_mark_latency(td, usec); if (td_write(td) && idx == DDIR_WRITE && + td->o.do_verify && td->o.verify != VERIFY_NONE) log_io_piece(td, io_u);