From: Jens Axboe Date: Fri, 9 Mar 2012 14:14:06 +0000 (+0100) Subject: gfio: handle clients individually X-Git-Tag: gfio-0.1~204 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=9988ca70151a191c477179be7999300ddff16230;hp=a9eccde44c0c5074fd11c1904d8cbcddeb883bfd gfio: handle clients individually Now we have per-client support, don't use any of the "do FOO for all clients" functions. Signed-off-by: Jens Axboe --- diff --git a/client.c b/client.c index af1dba44..225f6643 100644 --- a/client.c +++ b/client.c @@ -495,7 +495,7 @@ int fio_start_all_clients(void) * Send file contents to server backend. We could use sendfile(), but to remain * more portable lets just read/write the darn thing. */ -static int fio_client_send_ini(struct fio_client *client, const char *filename) +static int __fio_client_send_ini(struct fio_client *client, const char *filename) { struct stat sb; char *p, *buf; @@ -548,6 +548,17 @@ static int fio_client_send_ini(struct fio_client *client, const char *filename) return ret; } +int fio_client_send_ini(struct fio_client *client, const char *filename) +{ + if (__fio_client_send_ini(client, filename)) { + remove_client(client); + return 1; + } + + client->sent_job = 1; + return 0; +} + int fio_clients_send_ini(const char *filename) { struct fio_client *client; @@ -556,10 +567,7 @@ int fio_clients_send_ini(const char *filename) flist_for_each_safe(entry, tmp, &client_list) { client = flist_entry(entry, struct fio_client, list); - if (fio_client_send_ini(client, filename)) - remove_client(client); - - client->sent_job = 1; + fio_client_send_ini(client, filename); } return !nr_clients; diff --git a/client.h b/client.h index ab093171..e280adbd 100644 --- a/client.h +++ b/client.h @@ -107,6 +107,7 @@ extern int fio_client_connect(struct fio_client *); extern int fio_clients_connect(void); extern int fio_start_client(struct fio_client *); extern int fio_start_all_clients(void); +extern int fio_client_send_ini(struct fio_client *, const char *); extern int fio_clients_send_ini(const char *); extern int fio_handle_clients(struct client_ops *); extern int fio_client_add(struct client_ops *, const char *, void **); diff --git a/gfio.c b/gfio.c index 1f85a491..b0cab29a 100644 --- a/gfio.c +++ b/gfio.c @@ -35,7 +35,6 @@ static int gfio_server_running; static const char *gfio_graph_font; -static void gfio_update_thread_status(char *status_message, double perc); static void view_log(GtkWidget *w, gpointer data); #define ARRAYSIZE(x) (sizeof((x)) / (sizeof((x)[0]))) @@ -170,6 +169,9 @@ struct gfio_client { struct thread_options o; }; +static void gfio_update_thread_status(struct gui_entry *ge, char *status_message, double perc); +static void gfio_update_thread_status_all(char *status_message, double perc); + static struct graph *setup_iops_graph(void) { struct graph *g; @@ -1200,7 +1202,7 @@ static void gfio_update_client_eta(struct fio_client *client, struct jobs_eta *j sprintf(dst, " - %s", eta_str); } - gfio_update_thread_status(output, perc); + gfio_update_thread_status(ge, output, perc); gdk_threads_leave(); } @@ -1286,7 +1288,7 @@ static void gfio_update_all_eta(struct jobs_eta *je) sprintf(dst, " - %s", eta_str); } - gfio_update_thread_status(output, perc); + gfio_update_thread_status_all(output, perc); gdk_threads_leave(); } @@ -1322,7 +1324,19 @@ static void gfio_probe_op(struct fio_client *client, struct fio_net_cmd *cmd) gdk_threads_leave(); } -static void gfio_update_thread_status(char *status_message, double perc) +static void gfio_update_thread_status(struct gui_entry *ge, + char *status_message, double perc) +{ + static char message[100]; + const char *m = message; + + strncpy(message, status_message, sizeof(message) - 1); + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ge->thread_status_pb), m); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ge->thread_status_pb), perc / 100.0); + gtk_widget_queue_draw(main_ui.window); +} + +static void gfio_update_thread_status_all(char *status_message, double perc) { struct gui *ui = &main_ui; static char message[100]; @@ -1448,10 +1462,11 @@ static void *job_thread(void *arg) static int send_job_files(struct gui_entry *ge) { + struct gfio_client *gc = ge->client; int i, ret = 0; for (i = 0; i < ge->nr_job_files; i++) { - ret = fio_clients_send_ini(ge->job_files[i]); + ret = fio_client_send_ini(gc->client, ge->job_files[i]); if (ret) break;