From 1e3d53acf28f1b61222eec244a67fad42f9a060d Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 22 Mar 2007 19:01:48 +0100 Subject: [PATCH] Improve mixed random append option If we set ->ddir_nr to o.ddir_nr initally, we can remove the double else in get_next_offset(). Signed-off-by: Jens Axboe --- init.c | 1 + io_u.c | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/init.c b/init.c index 911ee32f..27040326 100644 --- a/init.c +++ b/init.c @@ -424,6 +424,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num) td->ts.clat_stat[0].min_val = td->ts.clat_stat[1].min_val = ULONG_MAX; td->ts.slat_stat[0].min_val = td->ts.slat_stat[1].min_val = ULONG_MAX; td->ts.bw_stat[0].min_val = td->ts.bw_stat[1].min_val = ULONG_MAX; + td->ddir_nr = td->o.ddir_nr; if ((td->o.stonewall || td->o.numjobs > 1 || td->o.new_group) && prev_group_jobs) { diff --git a/io_u.c b/io_u.c index 45f37570..a171ee4b 100644 --- a/io_u.c +++ b/io_u.c @@ -52,6 +52,10 @@ static void mark_random_map(struct thread_data *td, struct io_u *io_u) while (blocks < nr_blocks) { unsigned int idx, bit; + /* + * If we have a mixed random workload, we may + * encounter blocks we already did IO to. + */ if (!td->o.ddir_nr && !random_map_free(td, f, block)) break; @@ -110,13 +114,12 @@ static int get_next_offset(struct thread_data *td, struct io_u *io_u) int loops = 5; if (td->o.ddir_nr) { - if (!td->ddir_nr) + if (!--td->ddir_nr) td->ddir_nr = td->o.ddir_nr; - else if (--td->ddir_nr) { + else { b = f->last_pos / td->o.min_bs[ddir]; goto out; - } else - td->ddir_nr = td->o.ddir_nr; + } } do { -- 2.25.1