Improve mixed random append option
authorJens Axboe <jens.axboe@oracle.com>
Thu, 22 Mar 2007 18:01:48 +0000 (19:01 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Thu, 22 Mar 2007 18:01:48 +0000 (19:01 +0100)
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 <jens.axboe@oracle.com>
init.c
io_u.c

diff --git a/init.c b/init.c
index 911ee32f995d4c6fd6562a2cde3194eaa1beca8c..27040326424a10ebc992e70c5fdc9929801309d9 100644 (file)
--- 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 45f37570b82b4d5e99eccf555cdac392f99a5815..a171ee4be8998cfd07612ea79bc6d854dbfcc3f3 100644 (file)
--- 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 {