Fio 1.22-rc3
[fio.git] / init.c
diff --git a/init.c b/init.c
index 3469584f3c9f51162f5a9c2fb755213af7bfb736..5de6f4f6df7b7e13d33733d456224d86658f7537 100644 (file)
--- a/init.c
+++ b/init.c
@@ -19,7 +19,7 @@
 #include "smalloc.h"
 #include "filehash.h"
 
-static char fio_version_string[] = "fio 1.20";
+static char fio_version_string[] = "fio 1.22-rc3";
 
 #define FIO_RANDSEED           (0xb1899bedUL)
 
@@ -220,9 +220,6 @@ static int fixup_options(struct thread_data *td)
                return 1;
        }
 
-       if (o->rwmix[DDIR_READ] + o->rwmix[DDIR_WRITE] > 100)
-               o->rwmix[DDIR_WRITE] = 100 - o->rwmix[DDIR_READ];
-
        if (o->write_iolog_file && o->read_iolog_file) {
                log_err("fio: read iolog overrides write_iolog\n");
                free(o->write_iolog_file);
@@ -310,7 +307,7 @@ static int fixup_options(struct thread_data *td)
        }
 
        if (o->fill_device && !o->size)
-               o->size = ULONG_LONG_MAX;
+               o->size = -1ULL;
 
        if (td_rw(td) && td->o.verify != VERIFY_NONE)
                log_info("fio: mixed read/write workload with verify. May not "
@@ -617,6 +614,8 @@ static int parse_jobs_ini(char *file, int stonewall_flag)
        int first_sect = 1;
        int skip_fgets = 0;
        int inside_skip = 0;
+       char **opts;
+       int i, alloc_opts, num_opts;
 
        if (!strcmp(file, "-"))
                f = stdin;
@@ -636,6 +635,10 @@ static int parse_jobs_ini(char *file, int stonewall_flag)
        name = malloc(280);
        memset(name, 0, 280);
 
+       alloc_opts = 8;
+       opts = malloc(sizeof(char *) * alloc_opts);
+       num_opts = 0;
+
        stonewall = stonewall_flag;
        do {
                /*
@@ -694,6 +697,9 @@ static int parse_jobs_ini(char *file, int stonewall_flag)
                        stonewall = 0;
                }
 
+               num_opts = 0;
+               memset(opts, 0, alloc_opts * sizeof(char *));
+
                while ((p = fgets(string, 4096, f)) != NULL) {
                        if (is_empty_or_comment(p))
                                continue;
@@ -711,29 +717,42 @@ static int parse_jobs_ini(char *file, int stonewall_flag)
 
                        strip_blank_end(p);
 
-                       /*
-                        * Don't break here, continue parsing options so we
-                        * dump all the bad ones. Makes trial/error fixups
-                        * easier on the user.
-                        */
-                       ret |= fio_option_parse(td, p);
-                       if (!ret && dump_cmdline)
-                               log_info("--%s ", p);
+                       if (num_opts == alloc_opts) {
+                               alloc_opts <<= 1;
+                               opts = realloc(opts,
+                                               alloc_opts * sizeof(char *));
+                       }
+
+                       opts[num_opts] = strdup(p);
+                       num_opts++;
                }
 
-               if (!ret)
+               ret = fio_options_parse(td, opts, num_opts);
+               if (!ret) {
+                       if (dump_cmdline)
+                               for (i = 0; i < num_opts; i++)
+                                       log_info("--%s ", opts[i]);
+
                        ret = add_job(td, name, 0);
-               else {
+               else {
                        log_err("fio: job %s dropped\n", name);
                        put_job(td);
                }
+
+               for (i = 0; i < num_opts; i++)
+                       free(opts[i]);
+               num_opts = 0;
        } while (!ret);
 
        if (dump_cmdline)
                log_info("\n");
 
+       for (i = 0; i < num_opts; i++)
+               free(opts[i]);
+
        free(string);
        free(name);
+       free(opts);
        if (f != stdin)
                fclose(f);
        return ret;
@@ -859,7 +878,7 @@ struct debug_level debug_levels[] = {
        { .name = "parse",      .shift = FD_PARSE },
        { .name = "diskutil",   .shift = FD_DISKUTIL },
        { .name = "job",        .shift = FD_JOB },
-       { },
+       { .name = NULL, },
 };
 
 static int set_debug(const char *string)
@@ -919,7 +938,7 @@ static int set_debug(const char *string)
        return 0;
 }
 #else
-static void set_debug(const char *string)
+static int set_debug(const char *string)
 {
        log_err("fio: debug tracing not included in build\n");
        return 1;