iolog: dprint() casts for 32-bit warnings
[fio.git] / iolog.c
diff --git a/iolog.c b/iolog.c
index 8eef93258199dc9070adb47ca5b5ff8631ae216a..6576ca55237e58668bb892d1f4b1ec227eaef515 100644 (file)
--- a/iolog.c
+++ b/iolog.c
@@ -576,6 +576,9 @@ void setup_log(struct io_log **log, struct log_params *p,
               const char *filename)
 {
        struct io_log *l;
+       int i;
+       struct io_u_plat_entry *entry;
+       struct flist_head *list;
 
        l = scalloc(1, sizeof(*l));
        INIT_FLIST_HEAD(&l->io_logs);
@@ -589,6 +592,16 @@ void setup_log(struct io_log **log, struct log_params *p,
        l->filename = strdup(filename);
        l->td = p->td;
 
+       /* Initialize histogram lists for each r/w direction,
+        * with initial io_u_plat of all zeros:
+        */
+       for (i = 0; i < DDIR_RWDIR_CNT; i++) {
+               list = &l->hist_window[i].list;
+               INIT_FLIST_HEAD(list);
+               entry = calloc(1, sizeof(struct io_u_plat_entry));
+               flist_add(&entry->list, list);
+       }
+
        if (l->td && l->td->o.io_submit_mode != IO_MODE_OFFLOAD) {
                struct io_logs *p;
 
@@ -661,21 +674,32 @@ void free_log(struct io_log *log)
        sfree(log);
 }
 
-static inline int hist_sum(int j, int stride, unsigned int *io_u_plat) {
-       int sum = 0;
-       for (int k = 0; k < stride; k++) {
-               sum += io_u_plat[j + k];
+inline unsigned long hist_sum(int j, int stride, unsigned int *io_u_plat,
+               unsigned int *io_u_plat_last)
+{
+       unsigned long sum;
+       int k;
+
+       if (io_u_plat_last) {
+               for (k = sum = 0; k < stride; k++)
+                       sum += io_u_plat[j + k] - io_u_plat_last[j + k];
+       } else {
+               for (k = sum = 0; k < stride; k++)
+                       sum += io_u_plat[j + k];
        }
+
        return sum;
 }
 
-void flush_hist_samples(FILE *f, int hist_coarseness, void *samples,
-       uint64_t sample_size)
+static void flush_hist_samples(FILE *f, int hist_coarseness, void *samples,
+                              uint64_t sample_size)
 {
        struct io_sample *s;
        int log_offset;
        uint64_t i, j, nr_samples;
+       struct io_u_plat_entry *entry, *entry_before;
        unsigned int *io_u_plat;
+       unsigned int *io_u_plat_before;
 
        int stride = 1 << hist_coarseness;
        
@@ -689,15 +713,25 @@ void flush_hist_samples(FILE *f, int hist_coarseness, void *samples,
 
        for (i = 0; i < nr_samples; i++) {
                s = __get_sample(samples, log_offset, i);
-               io_u_plat = (unsigned int *)(s->val);
-               fprintf(f, "%lu, %u, %u, ", (unsigned long)s->time,
-                       io_sample_ddir(s), s->bs);
+
+               entry = (struct io_u_plat_entry *) (uintptr_t) s->val;
+               io_u_plat = entry->io_u_plat;
+
+               entry_before = flist_first_entry(&entry->list, struct io_u_plat_entry, list);
+               io_u_plat_before = entry_before->io_u_plat;
+
+               fprintf(f, "%lu, %u, %u, ", (unsigned long) s->time,
+                                               io_sample_ddir(s), s->bs);
                for (j = 0; j < FIO_IO_U_PLAT_NR - stride; j += stride) {
-                       fprintf(f, "%lu, ", (unsigned long) hist_sum(j, stride, io_u_plat)); 
+                       fprintf(f, "%lu, ", hist_sum(j, stride, io_u_plat,
+                                               io_u_plat_before));
                }
-               fprintf(f, "%lu\n", (unsigned long) 
-                       hist_sum(FIO_IO_U_PLAT_NR - stride, stride, io_u_plat));
-               free(io_u_plat);
+               fprintf(f, "%lu\n", (unsigned long)
+                       hist_sum(FIO_IO_U_PLAT_NR - stride, stride, io_u_plat,
+                                       io_u_plat_before));
+
+               flist_del(&entry_before->list);
+               free(entry_before);
        }
 }
 
@@ -1033,9 +1067,9 @@ void flush_log(struct io_log *log, bool do_append)
                
                if (log == log->td->clat_hist_log)
                        flush_hist_samples(f, log->hist_coarseness, cur_log->log,
-                                          cur_log->nr_samples * log_entry_sz(log));
+                                          log_sample_sz(log, cur_log));
                else
-                       flush_samples(f, cur_log->log, cur_log->nr_samples * log_entry_sz(log));
+                       flush_samples(f, cur_log->log, log_sample_sz(log, cur_log));
                
                sfree(cur_log);
        }
@@ -1119,7 +1153,8 @@ static int gz_work(struct iolog_flush_data *data)
                                data->log->filename);
        do {
                if (c)
-                       dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
+                       dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq,
+                               (unsigned long) c->len);
                c = get_new_chunk(seq);
                stream.avail_out = GZ_CHUNK;
                stream.next_out = c->buf;
@@ -1156,7 +1191,7 @@ static int gz_work(struct iolog_flush_data *data)
        total -= c->len;
        c->len = GZ_CHUNK - stream.avail_out;
        total += c->len;
-       dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
+       dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, (unsigned long) c->len);
 
        if (ret != Z_STREAM_END) {
                do {
@@ -1167,7 +1202,8 @@ static int gz_work(struct iolog_flush_data *data)
                        c->len = GZ_CHUNK - stream.avail_out;
                        total += c->len;
                        flist_add_tail(&c->list, &list);
-                       dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len);
+                       dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq,
+                               (unsigned long) c->len);
                } while (ret != Z_STREAM_END);
        }