Merge branch 'manpage' of https://github.com/sitsofe/fio
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index b3861887e2a204b404acb9c043f1c7302a7c32be..fec363964f29270a374bc0732423d13e8194bbc6 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -243,15 +243,13 @@ out:
 int calc_lat(struct io_stat *is, unsigned long *min, unsigned long *max,
             double *mean, double *dev)
 {
-       double n = is->samples;
+       double n = (double) is->samples;
 
-       if (is->samples == 0)
+       if (n == 0)
                return 0;
 
        *min = is->min_val;
        *max = is->max_val;
-
-       n = (double) is->samples;
        *mean = is->mean.u.f;
 
        if (n > 1.0)
@@ -1445,11 +1443,21 @@ static struct timeval status_time;
 static int check_status_file(void)
 {
        struct stat sb;
+       const char *temp_dir;
+       char fio_status_file_path[PATH_MAX];
+
+       temp_dir = getenv("TMPDIR");
+       if (temp_dir == NULL)
+               temp_dir = getenv("TEMP");
+       if (temp_dir == NULL)
+               temp_dir = "/tmp";
 
-       if (stat(FIO_STATUS_FILE, &sb))
+       snprintf(fio_status_file_path, sizeof(fio_status_file_path), "%s/%s", temp_dir, FIO_STATUS_FILE);
+
+       if (stat(fio_status_file_path, &sb))
                return 0;
 
-       unlink(FIO_STATUS_FILE);
+       unlink(fio_status_file_path);
        return 1;
 }
 
@@ -1496,13 +1504,23 @@ static void __add_log_sample(struct io_log *iolog, unsigned long val,
 {
        const int nr_samples = iolog->nr_samples;
 
+       if (iolog->disabled)
+               return;
+
        if (!iolog->nr_samples)
                iolog->avg_last = t;
 
        if (iolog->nr_samples == iolog->max_samples) {
                int new_size = sizeof(struct io_sample) * iolog->max_samples*2;
+               void *new_log;
 
-               iolog->log = realloc(iolog->log, new_size);
+               new_log = realloc(iolog->log, new_size);
+               if (!new_log) {
+                       log_err("fio: failed extending iolog! Will stop logging.\n");
+                       iolog->disabled = 1;
+                       return;
+               }
+               iolog->log = new_log;
                iolog->max_samples <<= 1;
        }
 
@@ -1683,7 +1701,7 @@ void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs,
        fio_gettime(&td->bw_sample_time, NULL);
 }
 
-void add_iops_sample(struct thread_data *td, enum fio_ddir ddir,
+void add_iops_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs,
                     struct timeval *t)
 {
        struct thread_stat *ts = &td->ts;
@@ -1710,7 +1728,7 @@ void add_iops_sample(struct thread_data *td, enum fio_ddir ddir,
                add_stat_sample(&ts->iops_stat[ddir], iops);
 
                if (td->iops_log)
-                       add_log_sample(td, td->iops_log, iops, ddir, 0);
+                       add_log_sample(td, td->iops_log, iops, ddir, bs);
 
                td->stat_io_blocks[ddir] = td->this_io_blocks[ddir];
        }