Merge branch 'atomic-writes'
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 6b841e9c263bf1b1960d00b551d78e7ebb986467..4bb6cfa7f39e0b1152cd62bbadd03d3e4744f62c 100644 (file)
--- a/fio.h
+++ b/fio.h
 
 struct fio_sem;
 
 
 struct fio_sem;
 
+#define MAX_TRIM_RANGE 256
+
+/*
+ * Range for trim command
+ */
+struct trim_range {
+       unsigned long long start;
+       unsigned long long len;
+};
+
 /*
  * offset generator types
  */
 /*
  * offset generator types
  */
@@ -144,6 +154,7 @@ enum {
        FIO_RAND_POISSON3_OFF,
        FIO_RAND_PRIO_CMDS,
        FIO_RAND_DEDUPE_WORKING_SET_IX,
        FIO_RAND_POISSON3_OFF,
        FIO_RAND_PRIO_CMDS,
        FIO_RAND_DEDUPE_WORKING_SET_IX,
+       FIO_RAND_FDP_OFF,
        FIO_RAND_NR_OFFS,
 };
 
        FIO_RAND_NR_OFFS,
 };
 
@@ -247,8 +258,9 @@ struct thread_data {
        size_t orig_buffer_size;
        volatile int runstate;
        volatile bool terminate;
        size_t orig_buffer_size;
        volatile int runstate;
        volatile bool terminate;
-       bool last_was_sync;
-       enum fio_ddir last_ddir;
+
+       enum fio_ddir last_ddir_completed;
+       enum fio_ddir last_ddir_issued;
 
        int mmapfd;
 
 
        int mmapfd;
 
@@ -262,6 +274,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 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;
 
        struct frand_state buf_state;
        struct frand_state buf_state_prev;
@@ -275,7 +288,7 @@ struct thread_data {
        unsigned long long num_unique_pages;
 
        struct zone_split_index **zone_state_index;
        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;
 
        unsigned int verify_batch;
        unsigned int trim_batch;
@@ -386,7 +399,8 @@ struct thread_data {
 
        struct timespec start;  /* start of this loop */
        struct timespec epoch;  /* time job was started */
 
        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;
        struct timespec last_issue;
        long time_offset;
        struct timespec ts_cache;
@@ -606,9 +620,17 @@ static inline void fio_ro_check(const struct thread_data *td, struct io_u *io_u)
               !(io_u->ddir == DDIR_TRIM && !td_trim(td)));
 }
 
               !(io_u->ddir == DDIR_TRIM && !td_trim(td)));
 }
 
+static inline bool multi_range_trim(struct thread_data *td, struct io_u *io_u)
+{
+       if (io_u->ddir == DDIR_TRIM && td->o.num_range > 1)
+               return true;
+
+       return false;
+}
+
 static inline bool should_fsync(struct thread_data *td)
 {
 static inline bool should_fsync(struct thread_data *td)
 {
-       if (td->last_was_sync)
+       if (ddir_sync(td->last_ddir_issued))
                return false;
        if (td_write(td) || td->o.override_sync)
                return true;
                return false;
        if (td_write(td) || td->o.override_sync)
                return true;
@@ -638,7 +660,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 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);
 extern void add_job_opts(const char **, int);
 extern int ioengine_load(struct thread_data *);
 extern bool parse_dryrun(void);
@@ -686,8 +707,8 @@ enum {
        TD_NR,
 };
 
        TD_NR,
 };
 
-#define TD_ENG_FLAG_SHIFT      18
-#define TD_ENG_FLAG_MASK       ((1ULL << 18) - 1)
+#define TD_ENG_FLAG_SHIFT      (__TD_F_LAST)
+#define TD_ENG_FLAG_MASK       ((1ULL << (__TD_F_LAST)) - 1)
 
 static inline void td_set_ioengine_flags(struct thread_data *td)
 {
 
 static inline void td_set_ioengine_flags(struct thread_data *td)
 {