X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=72ec85dc740ef08f500662d25c7b7081f2d316f6;hp=849bcf9fd5e28d4ffab1979059d373ad153ae495;hb=c376910cc9a32c98829ceec19f35d7aae0a11e23;hpb=bebe639808147d587bbe776566d390b9ff98773f diff --git a/init.c b/init.c index 849bcf9f..72ec85dc 100644 --- a/init.c +++ b/init.c @@ -23,12 +23,14 @@ #include "lib/getopt.h" +#include "fio_version.h" + #if FIO_PATCH > 0 -static char fio_version_string[] = __fio_stringify(FIO_MAJOR) "." \ +const char fio_version_string[] = __fio_stringify(FIO_MAJOR) "." \ __fio_stringify(FIO_MINOR) "." \ __fio_stringify(FIO_PATCH); #else -static char fio_version_string[] = __fio_stringify(FIO_MAJOR) "." \ +const char fio_version_string[] = __fio_stringify(FIO_MAJOR) "." \ __fio_stringify(FIO_MINOR); #endif @@ -192,7 +194,7 @@ static struct option l_opts[FIO_NR_OPTIONS] = { .val = 'S', }, { .name = (char *) "daemonize", - .has_arg = no_argument, + .has_arg = required_argument, .val = 'D', }, { @@ -316,6 +318,8 @@ static void put_job(struct thread_data *td) if (td->error) log_info("fio: %s\n", td->verror); + fio_options_free(td); + memset(&threads[td->thread_number - 1], 0, sizeof(*td)); thread_number--; } @@ -960,7 +964,7 @@ int parse_jobs_ini(char *file, int is_buf, int stonewall_flag) if (is_buf) p = strsep(&file, "\n"); else - p = fgets(string, 4095, f); + p = fgets(string, 4096, f); if (!p) break; } @@ -1068,6 +1072,12 @@ int parse_jobs_ini(char *file, int is_buf, int stonewall_flag) if (dump_cmdline) log_info("\n"); + i = 0; + while (i < nr_job_sections) { + free(job_sections[i]); + i++; + } + for (i = 0; i < num_opts; i++) free(opts[i]); @@ -1119,7 +1129,8 @@ static void usage(const char *name) printf("\t--warnings-fatal Fio parser warnings are fatal\n"); printf("\t--max-jobs\tMaximum number of threads/processes to support\n"); printf("\t--server=args\tStart a backend fio server\n"); - printf("\t--client=hostname Talk to remove backend fio server at hostname\n"); + printf("\t--daemonize=pidfile Background fio server, write pid to file\n"); + printf("\t--client=hostname Talk to remote backend fio server at hostname\n"); printf("\nFio was written by Jens Axboe "); printf("\n Jens Axboe \n"); } @@ -1241,9 +1252,9 @@ static int client_flag_set(char c) return 0; } -int parse_cmd_client(void *client, char *opt) +void parse_cmd_client(void *client, char *opt) { - return fio_client_add_cmd_option(client, opt); + fio_client_add_cmd_option(client, opt); } int parse_cmd_line(int argc, char *argv[]) @@ -1251,8 +1262,8 @@ int parse_cmd_line(int argc, char *argv[]) struct thread_data *td = NULL; int c, ini_idx = 0, lidx, ret = 0, do_exit = 0, exit_val = 0; char *ostr = cmd_optstr; - int daemonize_server = 0; - void *cur_client; + void *pid_file = NULL; + void *cur_client = NULL; int backend = 0; /* @@ -1265,11 +1276,7 @@ int parse_cmd_line(int argc, char *argv[]) did_arg = 1; if ((c & FIO_CLIENT_FLAG) || client_flag_set(c)) { - if (parse_cmd_client(cur_client, argv[optind - 1])) { - exit_val = 1; - do_exit++; - break; - } + parse_cmd_client(cur_client, argv[optind - 1]); c &= ~FIO_CLIENT_FLAG; } @@ -1323,7 +1330,7 @@ int parse_cmd_line(int argc, char *argv[]) break; case 'V': terse_version = atoi(optarg); - if (terse_version != 2) { + if (terse_version != 3) { log_err("fio: bad terse version format\n"); exit_val = 1; do_exit++; @@ -1410,7 +1417,7 @@ int parse_cmd_line(int argc, char *argv[]) backend = 1; break; case 'D': - daemonize_server = 1; + pid_file = strdup(optarg); break; case 'C': if (is_backend) { @@ -1447,7 +1454,7 @@ int parse_cmd_line(int argc, char *argv[]) } if (is_backend && backend) - return fio_start_server(daemonize_server); + return fio_start_server(pid_file); if (td) { if (!ret) @@ -1498,7 +1505,7 @@ int parse_options(int argc, char *argv[]) } free(ini_file); - options_mem_free(&def_thread); + fio_options_free(&def_thread); if (!thread_number) { if (dump_cmdline) @@ -1526,6 +1533,8 @@ int parse_options(int argc, char *argv[]) fio_gtod_cpu = def_thread.o.gtod_cpu; } - log_info("fio %s\n", fio_version_string); + if (!terse_output) + log_info("fio %s\n", fio_version_string); + return 0; }