Warn when seeing a job option outside of a job section
[fio.git] / init.c
diff --git a/init.c b/init.c
index 911ee32f995d4c6fd6562a2cde3194eaa1beca8c..4fd41b7dff1d14825df5fa95230b284dffeb4dd9 100644 (file)
--- a/init.c
+++ b/init.c
@@ -17,7 +17,7 @@
 #include "fio.h"
 #include "parse.h"
 
-static char fio_version_string[] = "fio 1.14a";
+static char fio_version_string[] = "fio 1.15";
 
 #define FIO_RANDSEED           (0xb1899bedUL)
 
@@ -115,6 +115,9 @@ static struct thread_data *get_new_job(int global, struct thread_data *parent)
        td = &threads[thread_number++];
        *td = *parent;
 
+       dup_files(td, parent);
+       options_mem_dupe(td);
+
        td->thread_number = thread_number;
        return td;
 }
@@ -358,7 +361,6 @@ static int init_random_state(struct thread_data *td)
        return 0;
 }
 
-
 /*
  * Adds a job to the list of things todo. Sanitizes the various options
  * to make sure we don't have conflicts, and initializes various
@@ -369,7 +371,6 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
        const char *ddir_str[] = { NULL, "read", "write", "rw", NULL,
                                   "randread", "randwrite", "randrw" };
        unsigned int i;
-       struct fio_file *f;
        const char *engine;
        char fname[PATH_MAX];
        int numjobs, file_alloced;
@@ -412,18 +413,12 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
        if (fixup_options(td))
                goto err;
 
-       for_each_file(td, f, i) {
-               if (td->o.directory && f->filetype == FIO_TYPE_FILE) {
-                       sprintf(fname, "%s/%s", td->o.directory, f->file_name);
-                       f->file_name = strdup(fname);
-               }
-       }
-               
        td->mutex = fio_sem_init(0);
 
        td->ts.clat_stat[0].min_val = td->ts.clat_stat[1].min_val = ULONG_MAX;
        td->ts.slat_stat[0].min_val = td->ts.slat_stat[1].min_val = ULONG_MAX;
        td->ts.bw_stat[0].min_val = td->ts.bw_stat[1].min_val = ULONG_MAX;
+       td->ddir_nr = td->o.ddir_nr;
 
        if ((td->o.stonewall || td->o.numjobs > 1 || td->o.new_group)
             && prev_group_jobs) {
@@ -486,6 +481,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
 
                td_new->o.numjobs = 1;
                td_new->o.stonewall = 0;
+               td_new->o.new_group = 0;
 
                if (file_alloced) {
                        td_new->o.filename = NULL;
@@ -549,10 +545,16 @@ static int parse_jobs_ini(char *file, int stonewall_flag)
                p = fgets(string, 4095, f);
                if (!p)
                        break;
+
+               strip_blank_front(&p);
+               strip_blank_end(p);
+
                if (is_empty_or_comment(p))
                        continue;
-               if (sscanf(p, "[%255s]", name) != 1)
+               if (sscanf(p, "[%255s]", name) != 1) {
+                       log_err("fio: option <%s> outside of job section\n", p);
                        continue;
+               }
 
                global = !strncmp(name, "global", 6);
 
@@ -807,6 +809,7 @@ int parse_options(int argc, char *argv[])
        }
 
        free(ini_file);
+       options_mem_free(&def_thread);
 
        if (!thread_number) {
                log_err("No jobs defined(s)\n");