t/run-fio-tests: rename FioJobTest to FioJobFileTest
[fio.git] / rate-submit.c
index 13a0d706e078be41a53a31efc8d0a70f511d648f..103a80aa13f8e671f06d2b568f7fa8bc1cc342df 100644 (file)
@@ -12,8 +12,7 @@
 
 static void check_overlap(struct io_u *io_u)
 {
-       int i, res;
-       struct thread_data *td;
+       int res;
 
        /*
         * Allow only one thread to check for overlap at a time to prevent two
@@ -31,7 +30,7 @@ static void check_overlap(struct io_u *io_u)
        assert(res == 0);
 
 retry:
-       for_each_td(td, i) {
+       for_each_td(td) {
                if (td->runstate <= TD_SETTING_UP ||
                    td->runstate >= TD_FINISHING ||
                    !td->o.serialize_overlap ||
@@ -46,7 +45,7 @@ retry:
                res = pthread_mutex_lock(&overlap_check);
                assert(res == 0);
                goto retry;
-       }
+       } end_for_each();
 }
 
 static int io_workqueue_fn(struct submit_worker *sw,
@@ -154,6 +153,7 @@ static int io_workqueue_init_worker_fn(struct submit_worker *sw)
        dup_files(td, parent);
        td->eo = parent->eo;
        fio_options_mem_dupe(td);
+       td->iolog_f = parent->iolog_f;
 
        if (ioengine_load(td))
                goto err;
@@ -195,7 +195,16 @@ static void io_workqueue_exit_worker_fn(struct submit_worker *sw,
        struct thread_data *td = sw->priv;
 
        (*sum_cnt)++;
-       sum_thread_stats(&sw->wq->td->ts, &td->ts, *sum_cnt == 1);
+
+       /*
+        * io_workqueue_update_acct_fn() doesn't support per prio stats, and
+        * even if it did, offload can't be used with all async IO engines.
+        * If group reporting is set in the parent td, the group result
+        * generated by __show_run_stats() can still contain multiple prios
+        * from different offloaded jobs.
+        */
+       sw->wq->td->ts.disable_prio_stat = 1;
+       sum_thread_stats(&sw->wq->td->ts, &td->ts);
 
        fio_options_free(td);
        close_and_free_files(td);
@@ -254,6 +263,8 @@ static void sum_ddir(struct thread_data *dst, struct thread_data *src,
        sum_val(&dst->this_io_blocks[ddir], &src->this_io_blocks[ddir]);
        sum_val(&dst->this_io_bytes[ddir], &src->this_io_bytes[ddir]);
        sum_val(&dst->bytes_done[ddir], &src->bytes_done[ddir]);
+       if (ddir == DDIR_READ)
+               sum_val(&dst->bytes_verified, &src->bytes_verified);
 
        pthread_double_unlock(&dst->io_wq.stat_lock, &src->io_wq.stat_lock);
 }