Add a get_jobs_eta() to return jobs eta information
authorJens Axboe <axboe@fb.com>
Tue, 24 Jun 2014 14:40:21 +0000 (08:40 -0600)
committerJens Axboe <axboe@fb.com>
Tue, 24 Jun 2014 14:40:21 +0000 (08:40 -0600)
We duplicate this code in eta.c and server.c, consolidate it.

Signed-off-by: Jens Axboe <axboe@fb.com>
eta.c
server.c
stat.h

diff --git a/eta.c b/eta.c
index dfe66f9e8ffbb455efe44de1b800c8e037c87895..bdd537633fff90ff15f07806e632227f0ef6c132 100644 (file)
--- a/eta.c
+++ b/eta.c
@@ -8,10 +8,6 @@
 #include "fio.h"
 
 static char __run_str[REAL_MAX_JOBS + 1];
-
-/*
- * Worst level condensing would be 1:5, so allow enough room for that
- */
 static char run_str[__THREAD_RUNSTR_SZ(REAL_MAX_JOBS)];
 
 static void update_condensed_str(char *run_str, char *run_str_condensed)
@@ -584,19 +580,32 @@ void display_thread_status(struct jobs_eta *je)
        fflush(stdout);
 }
 
-void print_thread_status(void)
+struct jobs_eta *get_jobs_eta(int force, size_t *size)
 {
        struct jobs_eta *je;
-       size_t size;
 
        if (!thread_number)
-               return;
+               return NULL;
 
-       size = sizeof(*je) + THREAD_RUNSTR_SZ;
-       je = malloc(size);
-       memset(je, 0, size);
+       *size = sizeof(*je) + THREAD_RUNSTR_SZ;
+       je = malloc(*size);
+       memset(je, 0, *size);
+
+       if (!calc_thread_status(je, 0)) {
+               free(je);
+               return NULL;
+       }
+
+       return je;
+}
+
+void print_thread_status(void)
+{
+       struct jobs_eta *je;
+       size_t size;
 
-       if (calc_thread_status(je, 0))
+       je = get_jobs_eta(0, &size);
+       if (je)
                display_thread_status(je);
 
        free(je);
index e20f5921b6b4994f30fef52ab3a75235db7a16cd..76b6b54d369bbf0ec18afe502631f9d287150c41 100644 (file)
--- a/server.c
+++ b/server.c
@@ -666,21 +666,13 @@ static int handle_probe_cmd(struct fio_net_cmd *cmd)
 static int handle_send_eta_cmd(struct fio_net_cmd *cmd)
 {
        struct jobs_eta *je;
-       size_t size;
        uint64_t tag = cmd->tag;
+       size_t size;
        int i;
 
-       if (!thread_number)
-               return 0;
-
-       size = sizeof(*je) + THREAD_RUNSTR_SZ;
-       je = malloc(size);
-       memset(je, 0, size);
-
-       if (!calc_thread_status(je, 1)) {
-               free(je);
+       je = get_jobs_eta(1, &size);
+       if (!je)
                return 0;
-       }
 
        dprint(FD_NET, "server sending status\n");
 
diff --git a/stat.h b/stat.h
index 2c2f1e1a5e2c4e8be3fa375997c7c9d900a1bc4a..6f9d82a13c35a2ed041bc0c775fcc7af1ab6d4e5 100644 (file)
--- a/stat.h
+++ b/stat.h
@@ -205,6 +205,8 @@ struct jobs_eta {
        uint8_t run_str[];
 };
 
+extern struct jobs_eta *get_jobs_eta(int force, size_t *size);
+
 extern void stat_init(void);
 extern void stat_exit(void);
 
@@ -240,8 +242,10 @@ static inline int usec_to_msec(unsigned long *min, unsigned long *max,
 
        return 1;
 }
-
-#define __THREAD_RUNSTR_SZ(nr) (((nr) * 5) + 1)
+/*
+ * Worst level condensing would be 1:5, so allow enough room for that
+ */
+#define __THREAD_RUNSTR_SZ(nr) ((nr) * 5)
 #define THREAD_RUNSTR_SZ       __THREAD_RUNSTR_SZ(thread_number)
 
 #endif