X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=init.c;h=4762a815cadc0da4e97c175eaa4573da30138b9f;hp=84cb2d261251062a50cf4a1a6c875e4cd87edb97;hb=886a2b5b4cfc447bb2dcb711bddfe3999f1614e5;hpb=e592a06b36999bbb30675a4a58d4ff16ed65e555 diff --git a/init.c b/init.c index 84cb2d26..4762a815 100644 --- a/init.c +++ b/init.c @@ -17,7 +17,7 @@ #include "fio.h" #include "parse.h" -static char fio_version_string[] = "fio 1.17.1"; +static char fio_version_string[] = "fio 1.17.3"; #define FIO_RANDSEED (0xb1899bedUL) @@ -293,6 +293,9 @@ static int fixup_options(struct thread_data *td) o->time_based = 0; } + if (o->fill_device && !o->size) + o->size = ULONG_LONG_MAX; + return 0; } @@ -565,13 +568,17 @@ static int parse_jobs_ini(char *file, int stonewall_flag) unsigned int global; struct thread_data *td; char *string, *name; - fpos_t off; FILE *f; char *p; int ret = 0, stonewall; int first_sect = 1; + int skip_fgets = 0; + + if (!strcmp(file, "-")) + f = stdin; + else + f = fopen(file, "r"); - f = fopen(file, "r"); if (!f) { perror("fopen job file"); return 1; @@ -587,10 +594,17 @@ static int parse_jobs_ini(char *file, int stonewall_flag) stonewall = stonewall_flag; do { - p = fgets(string, 4095, f); - if (!p) - break; + /* + * if skip_fgets is set, we already have loaded a line we + * haven't handled. + */ + if (!skip_fgets) { + p = fgets(string, 4095, f); + if (!p) + break; + } + skip_fgets = 0; strip_blank_front(&p); strip_blank_end(p); @@ -627,20 +641,23 @@ static int parse_jobs_ini(char *file, int stonewall_flag) stonewall = 0; } - fgetpos(f, &off); while ((p = fgets(string, 4096, f)) != NULL) { if (is_empty_or_comment(p)) continue; strip_blank_front(&p); - if (p[0] == '[') + /* + * new section, break out and make sure we don't + * fgets() a new line at the top. + */ + if (p[0] == '[') { + skip_fgets = 1; break; + } strip_blank_end(p); - fgetpos(f, &off); - /* * Don't break here, continue parsing options so we * dump all the bad ones. Makes trial/error fixups @@ -651,10 +668,9 @@ static int parse_jobs_ini(char *file, int stonewall_flag) log_info("--%s ", p); } - if (!ret) { - fsetpos(f, &off); + if (!ret) ret = add_job(td, name, 0); - } else { + else { log_err("fio: job %s dropped\n", name); put_job(td); } @@ -665,7 +681,8 @@ static int parse_jobs_ini(char *file, int stonewall_flag) free(string); free(name); - fclose(f); + if (f != stdin) + fclose(f); return ret; } @@ -732,13 +749,15 @@ static int setup_thread_area(void) return 1; } + memset(threads, 0, max_jobs * sizeof(struct thread_data)); atexit(free_shm); return 0; } -static void usage(void) +static void usage(const char *name) { printf("%s\n", fio_version_string); + printf("%s [options] [job options] \n", name); printf("\t--output\tWrite output to file\n"); printf("\t--timeout\tRuntime in seconds\n"); printf("\t--latency-log\tGenerate per-job latency logs\n"); @@ -780,7 +799,7 @@ static int parse_cmd_line(int argc, char *argv[]) terse_output = 1; break; case 'h': - usage(); + usage(argv[0]); exit(0); case 'c': exit(fio_show_option_help(optarg)); @@ -886,6 +905,7 @@ int parse_options(int argc, char *argv[]) return 0; log_err("No jobs defined(s)\n"); + usage(argv[0]); return 1; }