Verify the absence of holes in struct jobs_eta at compile time
[fio.git] / stat.h
diff --git a/stat.h b/stat.h
index 5dcaae029cde28f77efbed623683ec271d04fc76..c209ab6c7a96ab67e59842c0e8e21a3d37212a3f 100644 (file)
--- a/stat.h
+++ b/stat.h
@@ -211,6 +211,9 @@ struct thread_stat {
        uint32_t first_error;
        uint64_t total_err_count;
 
+       /* ZBD stats */
+       uint64_t nr_zone_resets;
+
        uint64_t nr_block_infos;
        uint32_t block_infos[MAX_NR_BLOCK_INFOS];
 
@@ -243,34 +246,41 @@ struct thread_stat {
                uint64_t *ss_bw_data;
                uint64_t pad5;
        };
-} __attribute__((packed));
-
-struct jobs_eta {
-       uint32_t nr_running;
-       uint32_t nr_ramp;
-
-       uint32_t nr_pending;
-       uint32_t nr_setting_up;
-
-       uint64_t m_rate[DDIR_RWDIR_CNT], t_rate[DDIR_RWDIR_CNT];
-       uint64_t rate[DDIR_RWDIR_CNT];
-       uint32_t m_iops[DDIR_RWDIR_CNT], t_iops[DDIR_RWDIR_CNT];
-       uint32_t iops[DDIR_RWDIR_CNT];
-       uint64_t elapsed_sec;
-       uint64_t eta_sec;
-       uint32_t is_pow2;
-       uint32_t unit_base;
 
-       uint32_t sig_figs;
+       uint64_t cachehit;
+       uint64_t cachemiss;
+} __attribute__((packed));
 
-       uint32_t files_open;
+#define JOBS_ETA {                                                     \
+       uint32_t nr_running;                                            \
+       uint32_t nr_ramp;                                               \
+                                                                       \
+       uint32_t nr_pending;                                            \
+       uint32_t nr_setting_up;                                         \
+                                                                       \
+       uint64_t m_rate[DDIR_RWDIR_CNT], t_rate[DDIR_RWDIR_CNT];        \
+       uint64_t rate[DDIR_RWDIR_CNT];                                  \
+       uint32_t m_iops[DDIR_RWDIR_CNT] __attribute__((packed));        \
+       uint32_t t_iops[DDIR_RWDIR_CNT] __attribute__((packed));        \
+       uint32_t iops[DDIR_RWDIR_CNT] __attribute__((packed));          \
+       uint64_t elapsed_sec __attribute__((packed));                   \
+       uint64_t eta_sec __attribute__((packed));                       \
+       uint32_t is_pow2;                                               \
+       uint32_t unit_base;                                             \
+                                                                       \
+       uint32_t sig_figs;                                              \
+                                                                       \
+       uint32_t files_open;                                            \
+                                                                       \
+       /*                                                              \
+        * Network 'copy' of run_str[]                                  \
+        */                                                             \
+       uint32_t nr_threads;                                            \
+       uint8_t run_str[];                                              \
+}
 
-       /*
-        * Network 'copy' of run_str[]
-        */
-       uint32_t nr_threads;
-       uint8_t run_str[];
-} __attribute__((packed));
+struct jobs_eta JOBS_ETA;
+struct jobs_eta_packed JOBS_ETA __attribute__((packed));
 
 struct io_u_plat_entry {
        struct flist_head list;
@@ -323,7 +333,7 @@ extern void add_sync_clat_sample(struct thread_stat *ts,
 extern int calc_log_samples(void);
 
 extern struct io_log *agg_io_log[DDIR_RWDIR_CNT];
-extern int write_bw_log;
+extern bool write_bw_log;
 
 static inline bool nsec_to_usec(unsigned long long *min,
                                unsigned long long *max, double *mean,