Move unused and other attributes to the compiler section
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 82e2b62f62d8f16a48fc242790580de7a1b2dc46..3411bb4a2c286235c0b49504bc840c5b5f948368 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -20,7 +20,6 @@ struct thread_data;
 #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"
@@ -37,20 +36,17 @@ struct thread_data;
 #include "gettime.h"
 #include "lib/getopt.h"
 #include "lib/rand.h"
+#include "lib/rbtree.h"
 #include "client.h"
 #include "server.h"
 #include "stat.h"
 #include "flow.h"
 
-#ifdef FIO_HAVE_GUASI
-#include <guasi.h>
-#endif
-
-#ifdef FIO_HAVE_SOLARISAIO
+#ifdef CONFIG_SOLARISAIO
 #include <sys/asynch.h>
 #endif
 
-#ifdef FIO_HAVE_LIBNUMA
+#ifdef CONFIG_LIBNUMA
 #include <linux/mempolicy.h>
 #include <numa.h>
 
@@ -68,7 +64,6 @@ enum {
        RW_SEQ_IDENT,
 };
 
-
 enum {
        TD_F_VER_BACKLOG        = 1,
        TD_F_TRIM_BACKLOG       = 2,
@@ -118,10 +113,13 @@ struct thread_data {
        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;
@@ -214,22 +212,22 @@ struct thread_data {
        /*
         * 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;
 
        /*
@@ -278,6 +276,8 @@ struct thread_data {
        struct flist_head trim_list;
        unsigned long trim_entries;
 
+       struct flist_head next_rand_list;
+
        /*
         * for fileservice, how often to switch to a new file
         */
@@ -328,7 +328,7 @@ enum {
                int e = (err);                                          \
                (td)->error = e;                                        \
                if (!(td)->first_error)                                 \
-                       snprintf(td->verror, sizeof(td->verror) - 1, "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg));               \
+                       snprintf(td->verror, sizeof(td->verror), "file:%s:%d, func=%s, error=%s", __FILE__, __LINE__, (func), (msg));           \
        } while (0)
 
 
@@ -352,6 +352,7 @@ extern int temp_stall_ts;
 extern uintptr_t page_mask, page_size;
 extern int read_only;
 extern int eta_print;
+extern int eta_new_line;
 extern unsigned long done_secs;
 extern char *job_section;
 extern int fio_gtod_offload;
@@ -364,7 +365,6 @@ extern int is_backend;
 extern int nr_clients;
 extern int log_syslog;
 extern const char fio_version_string[];
-extern const fio_fp64_t def_percentile_list[FIO_IO_U_LIST_MAX_LEN];
 
 extern struct thread_data *threads;
 
@@ -375,47 +375,10 @@ static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u)
 
 #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)
                return 0;
-       if (td->o.odirect)
-               return 0;
        if (td_write(td) || td_rw(td) || td->o.override_sync)
                return 1;
 
@@ -444,11 +407,11 @@ extern void fio_options_mem_dupe(struct thread_data *);
 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
@@ -508,13 +471,6 @@ extern int is_blktrace(const char *);
 extern int load_blktrace(struct thread_data *, const char *);
 #endif
 
-/*
- * Mark unused variables passed to ops functions as unused, to silence gcc
- */
-#define fio_unused     __attribute((__unused__))
-#define fio_init       __attribute__((constructor))
-#define fio_exit       __attribute__((destructor))
-
 #define for_each_td(td, i)     \
        for ((i) = 0, (td) = &threads[0]; (i) < (int) thread_number; (i)++, (td)++)
 #define for_each_file(td, f, i)        \
@@ -558,7 +514,7 @@ static inline int __should_check_rate(struct thread_data *td,
 }
 
 static inline int should_check_rate(struct thread_data *td,
-                                   unsigned long *bytes_done)
+                                   uint64_t *bytes_done)
 {
        int ret = 0;
 
@@ -572,6 +528,14 @@ static inline int should_check_rate(struct thread_data *td,
        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));