ci: stop hard coding number of jobs for make
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 09c441491be9a41221042d6d837038adb55d0100..1322656fd4497501577804124438f38f55765e93 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -144,6 +144,7 @@ enum {
        FIO_RAND_POISSON3_OFF,
        FIO_RAND_PRIO_CMDS,
        FIO_RAND_DEDUPE_WORKING_SET_IX,
+       FIO_RAND_FDP_OFF,
        FIO_RAND_NR_OFFS,
 };
 
@@ -163,6 +164,7 @@ enum {
        F_ADV_TYPE,
        F_ADV_RANDOM,
        F_ADV_SEQUENTIAL,
+       F_ADV_NOREUSE,
 };
 
 /*
@@ -261,6 +263,7 @@ struct thread_data {
        struct frand_state verify_state_last_do_io;
        struct frand_state trim_state;
        struct frand_state delay_state;
+       struct frand_state fdp_state;
 
        struct frand_state buf_state;
        struct frand_state buf_state_prev;
@@ -274,7 +277,7 @@ struct thread_data {
        unsigned long long num_unique_pages;
 
        struct zone_split_index **zone_state_index;
-       unsigned int num_open_zones;
+       unsigned int num_write_zones;
 
        unsigned int verify_batch;
        unsigned int trim_batch;
@@ -376,7 +379,7 @@ struct thread_data {
 
        uint64_t *thinktime_blocks_counter;
        struct timespec last_thinktime;
-       uint64_t last_thinktime_blocks;
+       int64_t last_thinktime_blocks;
 
        /*
         * State for random io, a bitmap of blocks done vs not done
@@ -385,7 +388,8 @@ struct thread_data {
 
        struct timespec start;  /* start of this loop */
        struct timespec epoch;  /* time job was started */
-       unsigned long long alternate_epoch; /* Time job was started, clock_gettime's clock_id epoch based. */
+       unsigned long long alternate_epoch; /* Time job was started, as clock_gettime(log_alternate_epoch_clock_id) */
+       unsigned long long job_start; /* Time job was started, as clock_gettime(job_start_clock_id) */
        struct timespec last_issue;
        long time_offset;
        struct timespec ts_cache;
@@ -637,7 +641,6 @@ extern void fio_options_dup_and_init(struct option *);
 extern char *fio_option_dup_subs(const char *);
 extern void fio_options_mem_dupe(struct thread_data *);
 extern void td_fill_rand_seeds(struct thread_data *);
-extern void td_fill_verify_state_seed(struct thread_data *);
 extern void add_job_opts(const char **, int);
 extern int ioengine_load(struct thread_data *);
 extern bool parse_dryrun(void);
@@ -753,9 +756,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];                     \