projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
General fio.1 improvements
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index 53e126b48dc8e97f52eab64019975c628f2a803e..84cb2d261251062a50cf4a1a6c875e4cd87edb97 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.1
6.5
";
+static char fio_version_string[] = "fio 1.1
7.1
";
#define FIO_RANDSEED (0xb1899bedUL)
#define FIO_RANDSEED (0xb1899bedUL)
@@
-30,11
+30,13
@@
struct thread_data *threads = NULL;
int exitall_on_terminate = 0;
int terse_output = 0;
int exitall_on_terminate = 0;
int terse_output = 0;
+int eta_print;
unsigned long long mlock_size = 0;
FILE *f_out = NULL;
FILE *f_err = NULL;
int write_bw_log = 0;
unsigned long long mlock_size = 0;
FILE *f_out = NULL;
FILE *f_err = NULL;
int write_bw_log = 0;
+int read_only = 0;
static int def_timeout = 0;
static int write_lat_log = 0;
static int def_timeout = 0;
static int write_lat_log = 0;
@@
-89,7
+91,17
@@
static struct option long_options[FIO_NR_OPTIONS] = {
{
.name = "showcmd",
.has_arg = no_argument,
{
.name = "showcmd",
.has_arg = no_argument,
- .val = 's'
+ .val = 's',
+ },
+ {
+ .name = "readonly",
+ .has_arg = no_argument,
+ .val = 'r',
+ },
+ {
+ .name = "eta",
+ .has_arg = required_argument,
+ .val = 'e',
},
{
.name = NULL,
},
{
.name = NULL,
@@
-180,6
+192,11
@@
static int fixup_options(struct thread_data *td)
{
struct thread_options *o = &td->o;
{
struct thread_options *o = &td->o;
+ if (read_only && td_write(td)) {
+ log_err("fio: job <%s> has write bit set, but fio is in read-only mode\n", td->o.name);
+ return 1;
+ }
+
if (o->rwmix[DDIR_READ] + o->rwmix[DDIR_WRITE] > 100)
o->rwmix[DDIR_WRITE] = 100 - o->rwmix[DDIR_READ];
if (o->rwmix[DDIR_READ] + o->rwmix[DDIR_WRITE] > 100)
o->rwmix[DDIR_WRITE] = 100 - o->rwmix[DDIR_READ];
@@
-222,9
+239,6
@@
static int fixup_options(struct thread_data *td)
if (!o->file_size_high)
o->file_size_high = o->file_size_low;
if (!o->file_size_high)
o->file_size_high = o->file_size_low;
- if (td_read(td) && !td_rw(td))
- o->verify = 0;
-
if (o->norandommap && o->verify != VERIFY_NONE) {
log_err("fio: norandommap given, verify disabled\n");
o->verify = VERIFY_NONE;
if (o->norandommap && o->verify != VERIFY_NONE) {
log_err("fio: norandommap given, verify disabled\n");
o->verify = VERIFY_NONE;
@@
-564,8
+578,12
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
}
string = malloc(4096);
}
string = malloc(4096);
- name = malloc(256);
- memset(name, 0, 256);
+
+ /*
+ * it's really 256 + small bit, 280 should suffice
+ */
+ name = malloc(280);
+ memset(name, 0, 280);
stonewall = stonewall_flag;
do {
stonewall = stonewall_flag;
do {
@@
-579,8
+597,8
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
if (is_empty_or_comment(p))
continue;
if (sscanf(p, "[%255s]", name) != 1) {
if (is_empty_or_comment(p))
continue;
if (sscanf(p, "[%255s]", name) != 1) {
- log_err("fio: option <%s> outside of job section\n", p);
-
continue
;
+ log_err("fio: option <%s> outside of
[]
job section\n", p);
+
break
;
}
global = !strncmp(name, "global", 6);
}
global = !strncmp(name, "global", 6);
@@
-730,6
+748,8
@@
static void usage(void)
printf("\t--help\t\tPrint this page\n");
printf("\t--cmdhelp=cmd\tPrint command help, \"all\" for all of them\n");
printf("\t--showcmd\tTurn a job file into command line options\n");
printf("\t--help\t\tPrint this page\n");
printf("\t--cmdhelp=cmd\tPrint command help, \"all\" for all of them\n");
printf("\t--showcmd\tTurn a job file into command line options\n");
+ printf("\t--eta=when\tWhen ETA estimate should be printed\n");
+ printf("\t \tMay be \"always\", \"never\" or \"auto\"\n");
}
static int parse_cmd_line(int argc, char *argv[])
}
static int parse_cmd_line(int argc, char *argv[])
@@
-767,9
+787,18
@@
static int parse_cmd_line(int argc, char *argv[])
case 's':
dump_cmdline = 1;
break;
case 's':
dump_cmdline = 1;
break;
+ case 'r':
+ read_only = 1;
+ break;
case 'v':
printf("%s\n", fio_version_string);
exit(0);
case 'v':
printf("%s\n", fio_version_string);
exit(0);
+ case 'e':
+ if (!strcmp("always", optarg))
+ eta_print = FIO_ETA_ALWAYS;
+ else if (!strcmp("never", optarg))
+ eta_print = FIO_ETA_NEVER;
+ break;
case FIO_GETOPT_JOB: {
const char *opt = long_options[lidx].name;
char *val = optarg;
case FIO_GETOPT_JOB: {
const char *opt = long_options[lidx].name;
char *val = optarg;