projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Stop job if it fails to do any IO for a new invocation
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index 84cb2d261251062a50cf4a1a6c875e4cd87edb97..4762a815cadc0da4e97c175eaa4573da30138b9f 100644
(file)
--- a/
init.c
+++ b/
init.c
@@
-17,7
+17,7
@@
#include "fio.h"
#include "parse.h"
#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)
#define FIO_RANDSEED (0xb1899bedUL)
@@
-293,6
+293,9
@@
static int fixup_options(struct thread_data *td)
o->time_based = 0;
}
o->time_based = 0;
}
+ if (o->fill_device && !o->size)
+ o->size = ULONG_LONG_MAX;
+
return 0;
}
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;
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;
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;
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 {
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);
strip_blank_front(&p);
strip_blank_end(p);
@@
-627,20
+641,23
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
stonewall = 0;
}
stonewall = 0;
}
- fgetpos(f, &off);
while ((p = fgets(string, 4096, f)) != NULL) {
if (is_empty_or_comment(p))
continue;
strip_blank_front(&p);
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;
break;
+ }
strip_blank_end(p);
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
/*
* 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);
}
log_info("--%s ", p);
}
- if (!ret) {
- fsetpos(f, &off);
+ if (!ret)
ret = add_job(td, name, 0);
ret = add_job(td, name, 0);
-
}
else {
+ else {
log_err("fio: job %s dropped\n", name);
put_job(td);
}
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);
free(string);
free(name);
- fclose(f);
+ if (f != stdin)
+ fclose(f);
return ret;
}
return ret;
}
@@
-732,13
+749,15
@@
static int setup_thread_area(void)
return 1;
}
return 1;
}
+ memset(threads, 0, max_jobs * sizeof(struct thread_data));
atexit(free_shm);
return 0;
}
atexit(free_shm);
return 0;
}
-static void usage(
void
)
+static void usage(
const char *name
)
{
printf("%s\n", fio_version_string);
{
printf("%s\n", fio_version_string);
+ printf("%s [options] [job options] <job file(s)>\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");
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':
terse_output = 1;
break;
case 'h':
- usage();
+ usage(
argv[0]
);
exit(0);
case 'c':
exit(fio_show_option_help(optarg));
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");
return 0;
log_err("No jobs defined(s)\n");
+ usage(argv[0]);
return 1;
}
return 1;
}