Be sure to pick up any group error with group_reporting
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index 5470c87f226d56dffa27f6a3f4c8f60c0d30dfff..7d93abd5c1a5bc2b5c11ed3b7181e4610f95e22c 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -579,8 +579,8 @@ static void __sum_stat(struct io_stat *dst, struct io_stat *src, int nr)
                mean = src->mean;
                S = src->S;
        } else {
-               mean = ((src->mean * (double) nr) + dst->mean) / ((double) nr + 1.0);
-               S = ((src->S * (double) nr) + dst->S) / ((double) nr + 1.0);
+               mean = ((src->mean * (double) (nr - 1)) + dst->mean) / ((double) nr);
+               S = ((src->S * (double) (nr - 1)) + dst->S) / ((double) nr);
        }
 
        dst->mean = mean;
@@ -651,11 +651,21 @@ void show_run_stats(void)
                members++;
 
                if (!ts->groupid) {
+                       /*
+                        * These are per-group shared already
+                        */
                        ts->name = td->name;
                        ts->description = td->description;
-                       ts->error = td->error;
                        ts->groupid = td->groupid;
+
+                       /*
+                        * first pid in group, not very useful...
+                        */
                        ts->pid = td->pid;
+               }
+
+               if (td->error && !ts->error) {
+                       ts->error = td->error;
                        ts->verror = td->verror;
                }