summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Van Assche <bvanassche@acm.org>2019-08-14 13:10:10 -0700
committerJens Axboe <axboe@kernel.dk>2019-08-14 15:01:29 -0600
commit4c515ab4591acc7358e5886f841c635b62ebf19c (patch)
tree3c3315c9f6c94b7fcf27da150966e3812960258a
parenta5b1c9da0faf31675cf5180c48d29af1870af85d (diff)
Verify the absence of holes in struct jobs_eta at compile time
This patch verifies the correctness of the previous patch. Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--eta.c3
-rw-r--r--stat.h55
2 files changed, 32 insertions, 26 deletions
diff --git a/eta.c b/eta.c
index 647a1bd..5900bc0 100644
--- a/eta.c
+++ b/eta.c
@@ -736,6 +736,9 @@ void print_thread_status(void)
void print_status_init(int thr_number)
{
+ compiletime_assert(sizeof(struct jobs_eta) ==
+ sizeof(struct jobs_eta_packed), "jobs_eta");
+
DRD_IGNORE_VAR(__run_str);
__run_str[thr_number] = 'P';
update_condensed_str(__run_str, run_str);
diff --git a/stat.h b/stat.h
index c6353c7..c209ab6 100644
--- a/stat.h
+++ b/stat.h
@@ -251,33 +251,36 @@ struct thread_stat {
uint64_t cachemiss;
} __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] __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;
+#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[];
-};
+struct jobs_eta JOBS_ETA;
+struct jobs_eta_packed JOBS_ETA __attribute__((packed));
struct io_u_plat_entry {
struct flist_head list;