Refactor for_each_td() to catch inappropriate td ptr reuse
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 0592a4c3dc38a26db237f1cd99278719e99eecbb..325355174bd37c1134bb3d492a3f4aecee5e10c7 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -258,6 +258,7 @@ struct thread_data {
 
        struct frand_state bsrange_state[DDIR_RWDIR_CNT];
        struct frand_state verify_state;
+       struct frand_state verify_state_last_do_io;
        struct frand_state trim_state;
        struct frand_state delay_state;
 
@@ -356,6 +357,7 @@ struct thread_data {
         * Issue side
         */
        uint64_t io_issues[DDIR_RWDIR_CNT];
+       uint64_t verify_read_issues;
        uint64_t io_issue_bytes[DDIR_RWDIR_CNT];
        uint64_t loops;
 
@@ -751,9 +753,24 @@ extern void lat_target_reset(struct thread_data *);
 
 /*
  * Iterates all threads/processes within all the defined jobs
+ * Usage:
+ *             for_each_td(var_name_for_td) {
+ *                     << bodoy of your loop >>
+ *                      Note: internally-scoped loop index availble as __td_index
+ *             } end_for_each_td()
  */
-#define for_each_td(td, i)     \
-       for ((i) = 0, (td) = &segments[0].threads[0]; (i) < (int) thread_number; (i)++, (td) = tnumber_to_td((i)))
+#define for_each_td(td)                        \
+{                                                              \
+       int __td_index;                         \
+       struct thread_data *(td);       \
+       for (__td_index = 0, (td) = &segments[0].threads[0];\
+               __td_index < (int) thread_number; __td_index++, (td) = tnumber_to_td(__td_index))
+#define for_each_td_index()        \
+{                                                              \
+       int __td_index;                         \
+       for (__td_index = 0; __td_index < (int) thread_number; __td_index++)
+#define        end_for_each()  }
+
 #define for_each_file(td, f, i)        \
        if ((td)->files_index)                                          \
                for ((i) = 0, (f) = (td)->files[0];                     \