#include "thread_options.h"
#include "flist.h"
#include "fifo.h"
-#include "lib/rbtree.h"
#include "arch/arch.h"
#include "os/os.h"
#include "mutex.h"
#include "gettime.h"
#include "lib/getopt.h"
#include "lib/rand.h"
+#include "lib/rbtree.h"
#include "client.h"
#include "server.h"
#include "stat.h"
uint64_t stat_io_blocks[DDIR_RWDIR_CNT];
struct timeval iops_sample_time;
+ volatile int update_rusage;
+ struct fio_mutex *rusage_sem;
struct rusage ru_start;
struct rusage ru_end;
struct fio_file **files;
+ unsigned char *file_locks;
unsigned int files_size;
unsigned int files_index;
unsigned int nr_open_files;
/*
* Rate state
*/
- unsigned long long rate_bps[DDIR_RWDIR_CNT];
+ uint64_t rate_bps[DDIR_RWDIR_CNT];
long rate_pending_usleep[DDIR_RWDIR_CNT];
unsigned long rate_bytes[DDIR_RWDIR_CNT];
unsigned long rate_blocks[DDIR_RWDIR_CNT];
struct timeval lastrate[DDIR_RWDIR_CNT];
- unsigned long long total_io_size;
- unsigned long long fill_device_size;
+ uint64_t total_io_size;
+ uint64_t fill_device_size;
unsigned long io_issues[DDIR_RWDIR_CNT];
- unsigned long long io_blocks[DDIR_RWDIR_CNT];
- unsigned long long this_io_blocks[DDIR_RWDIR_CNT];
- unsigned long long io_bytes[DDIR_RWDIR_CNT];
- unsigned long long io_skip_bytes;
- unsigned long long this_io_bytes[DDIR_RWDIR_CNT];
- unsigned long long zone_bytes;
+ uint64_t io_blocks[DDIR_RWDIR_CNT];
+ uint64_t this_io_blocks[DDIR_RWDIR_CNT];
+ uint64_t io_bytes[DDIR_RWDIR_CNT];
+ uint64_t io_skip_bytes;
+ uint64_t this_io_bytes[DDIR_RWDIR_CNT];
+ uint64_t zone_bytes;
struct fio_mutex *mutex;
/*
#define REAL_MAX_JOBS 2048
-static inline enum error_type_bit td_error_type(enum fio_ddir ddir, int err)
-{
- if (err == EILSEQ)
- return ERROR_TYPE_VERIFY_BIT;
- if (ddir == DDIR_READ)
- return ERROR_TYPE_READ_BIT;
- return ERROR_TYPE_WRITE_BIT;
-}
-
-static int __NON_FATAL_ERR[] = {EIO, EILSEQ};
-static inline int td_non_fatal_error(struct thread_data *td,
- enum error_type_bit etype, int err)
-{
- int i;
- if (!td->o.ignore_error[etype]) {
- td->o.ignore_error[etype] = __NON_FATAL_ERR;
- td->o.ignore_error_nr[etype] = sizeof(__NON_FATAL_ERR)
- / sizeof(int);
- }
-
- if (!(td->o.continue_on_error & (1 << etype)))
- return 0;
- for (i = 0; i < td->o.ignore_error_nr[etype]; i++)
- if (td->o.ignore_error[etype][i] == err)
- return 1;
- return 0;
-}
-
-static inline void update_error_count(struct thread_data *td, int err)
-{
- td->total_err_count++;
- if (td->total_err_count == 1)
- td->first_error = err;
-}
-
static inline int should_fsync(struct thread_data *td)
{
if (td->last_was_sync)
extern void options_mem_dupe(void *data, struct fio_option *options);
extern void td_fill_rand_seeds(struct thread_data *);
extern void add_job_opts(const char **, int);
-extern char *num2str(unsigned long, int, int, int);
+extern char *num2str(unsigned long, int, int, int, int);
extern int ioengine_load(struct thread_data *);
-extern unsigned long page_mask;
-extern unsigned long page_size;
+extern uintptr_t page_mask;
+extern uintptr_t page_size;
extern int initialize_fio(char *envp[]);
#define FIO_GETOPT_JOB 0x89000000
return ret;
}
+static inline unsigned int td_max_bs(struct thread_data *td)
+{
+ unsigned int 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 int is_power_of_2(unsigned int val)
{
return (val != 0 && ((val & (val - 1)) == 0));