X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=io_u.c;h=945aa19288bdc333c0d7a5e6087c54813ea420d3;hb=7ceefc0914b9ff721047b4dc8be54625d43f577c;hp=5fbb2386237de6ba8aa106917e9f222ae564e014;hpb=5c5c33c1b0df088187a6d4fac5459df5e029763a;p=fio.git diff --git a/io_u.c b/io_u.c index 5fbb2386..945aa192 100644 --- a/io_u.c +++ b/io_u.c @@ -77,11 +77,6 @@ static uint64_t last_block(struct thread_data *td, struct fio_file *f, return max_blocks; } -struct rand_off { - struct flist_head list; - uint64_t off; -}; - static int __get_next_rand_offset(struct thread_data *td, struct fio_file *f, enum fio_ddir ddir, uint64_t *b, uint64_t lastb) @@ -272,16 +267,8 @@ bail: return 0; } -static int flist_cmp(void *data, struct flist_head *a, struct flist_head *b) -{ - struct rand_off *r1 = flist_entry(a, struct rand_off, list); - struct rand_off *r2 = flist_entry(b, struct rand_off, list); - - return r1->off - r2->off; -} - -static int get_off_from_method(struct thread_data *td, struct fio_file *f, - enum fio_ddir ddir, uint64_t *b) +static int get_next_rand_offset(struct thread_data *td, struct fio_file *f, + enum fio_ddir ddir, uint64_t *b) { if (td->o.random_distribution == FIO_RAND_DIST_RANDOM) { uint64_t lastb; @@ -306,25 +293,6 @@ static int get_off_from_method(struct thread_data *td, struct fio_file *f, return 1; } -/* - * Sort the reads for a verify phase in batches of verifysort_nr, if - * specified. - */ -static inline bool should_sort_io(struct thread_data *td) -{ - if (!td->o.verifysort_nr || !td->o.do_verify) - return false; - if (!td_random(td)) - return false; - if (td->runstate != TD_VERIFYING) - return false; - if (td->o.random_generator == FIO_RAND_GEN_TAUSWORTHE || - td->o.random_generator == FIO_RAND_GEN_TAUSWORTHE64) - return false; - - return true; -} - static bool should_do_random(struct thread_data *td, enum fio_ddir ddir) { unsigned int v; @@ -337,44 +305,6 @@ static bool should_do_random(struct thread_data *td, enum fio_ddir ddir) return v <= td->o.perc_rand[ddir]; } -static int get_next_rand_offset(struct thread_data *td, struct fio_file *f, - enum fio_ddir ddir, uint64_t *b) -{ - struct rand_off *r; - int i, ret = 1; - - if (!should_sort_io(td)) - return get_off_from_method(td, f, ddir, b); - - if (!flist_empty(&td->next_rand_list)) { -fetch: - r = flist_first_entry(&td->next_rand_list, struct rand_off, list); - flist_del(&r->list); - *b = r->off; - free(r); - return 0; - } - - for (i = 0; i < td->o.verifysort_nr; i++) { - r = malloc(sizeof(*r)); - - ret = get_off_from_method(td, f, ddir, &r->off); - if (ret) { - free(r); - break; - } - - flist_add(&r->list, &td->next_rand_list); - } - - if (ret && !i) - return ret; - - assert(!flist_empty(&td->next_rand_list)); - flist_sort(NULL, &td->next_rand_list, flist_cmp); - goto fetch; -} - static void loop_cache_invalidate(struct thread_data *td, struct fio_file *f) { struct thread_options *o = &td->o; @@ -395,9 +325,9 @@ static int get_next_rand_block(struct thread_data *td, struct fio_file *f, if (td->o.time_based || (td->o.file_service_type & __FIO_FSERVICE_NONUNIFORM)) { fio_file_reset(td, f); + loop_cache_invalidate(td, f); if (!get_next_rand_offset(td, f, ddir, b)) return 0; - loop_cache_invalidate(td, f); } dprint(FD_IO, "%s: rand offset failed, last=%llu, size=%llu\n", @@ -680,11 +610,8 @@ int io_u_quiesce(struct thread_data *td) * io's that have been actually submitted to an async engine, * and cur_depth is meaningless for sync engines. */ - if (td->io_u_queued || td->cur_depth) { - int fio_unused ret; - - ret = td_io_commit(td); - } + if (td->io_u_queued || td->cur_depth) + td_io_commit(td); while (td->io_u_in_flight) { int ret;