* For IO replaying
*/
struct flist_head io_log_list;
+ FILE *io_log_rfile;
+ unsigned int io_log_current;
+ unsigned int io_log_checkmark;
+ unsigned int io_log_highmark;
+ struct timespec io_log_highmark_time;
/*
* For tracking/handling discards
static inline void fio_ro_check(const struct thread_data *td, struct io_u *io_u)
{
- assert(!(io_u->ddir == DDIR_WRITE && !td_write(td)));
+ assert(!(io_u->ddir == DDIR_WRITE && !td_write(td)) &&
+ !(io_u->ddir == DDIR_TRIM && !td_trim(td)));
}
#define REAL_MAX_JOBS 4096
-static inline int should_fsync(struct thread_data *td)
+static inline bool should_fsync(struct thread_data *td)
{
if (td->last_was_sync)
- return 0;
+ return false;
if (td_write(td) || td->o.override_sync)
- return 1;
+ return true;
- return 0;
+ return false;
}
/*
extern int fio_show_option_help(const char *);
extern void fio_options_set_ioengine_opts(struct option *long_options, struct thread_data *td);
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 *);
return false;
}
-static inline bool __should_check_rate(struct thread_data *td,
- enum fio_ddir ddir)
+static inline bool __should_check_rate(struct thread_data *td)
{
return (td->flags & TD_F_CHECK_RATE) != 0;
}
static inline bool should_check_rate(struct thread_data *td)
{
- if (__should_check_rate(td, DDIR_READ) && td->bytes_done[DDIR_READ])
- return true;
- if (__should_check_rate(td, DDIR_WRITE) && td->bytes_done[DDIR_WRITE])
- return true;
- if (__should_check_rate(td, DDIR_TRIM) && td->bytes_done[DDIR_TRIM])
- return true;
+ if (!__should_check_rate(td))
+ return false;
- return false;
+ return ddir_rw_sum(td->bytes_done) != 0;
}
-static inline unsigned int td_max_bs(struct thread_data *td)
+static inline unsigned long long td_max_bs(struct thread_data *td)
{
- unsigned int max_bs;
+ unsigned long long max_bs;
max_bs = max(td->o.max_bs[DDIR_READ], td->o.max_bs[DDIR_WRITE]);
return max(td->o.max_bs[DDIR_TRIM], max_bs);
}
-static inline unsigned int td_min_bs(struct thread_data *td)
+static inline unsigned long long td_min_bs(struct thread_data *td)
{
- unsigned int min_bs;
+ unsigned long long min_bs;
min_bs = min(td->o.min_bs[DDIR_READ], td->o.min_bs[DDIR_WRITE]);
return min(td->o.min_bs[DDIR_TRIM], min_bs);