Get rid of mixed rw and verify warning
[fio.git] / init.c
diff --git a/init.c b/init.c
index 4ce57a4f3dc4e7a7814a10d4eb05ffa22f3047a3..327a3c5edc6a78e171f9a2cdeb50613f75db2d01 100644 (file)
--- a/init.c
+++ b/init.c
@@ -22,7 +22,7 @@
 
 #include "lib/getopt.h"
 
-static char fio_version_string[] = "fio 1.50-rc3";
+static char fio_version_string[] = "fio 1.51";
 
 #define FIO_RANDSEED           (0xb1899bedUL)
 
@@ -39,7 +39,8 @@ int eta_print;
 unsigned long long mlock_size = 0;
 FILE *f_out = NULL;
 FILE *f_err = NULL;
-char *job_section = NULL;
+char **job_sections = NULL;
+int nr_job_sections = 0;
 char *exec_profile = NULL;
 int warnings_fatal = 0;
 
@@ -375,12 +376,6 @@ static int fixup_options(struct thread_data *td)
                o->size = -1ULL;
 
        if (o->verify != VERIFY_NONE) {
-               if (td_rw(td)) {
-                       log_info("fio: mixed read/write workload with verify. "
-                               "May not work as expected, unless you "
-                               "pre-populated the file\n");
-                       ret = warnings_fatal;
-               }
                if (td_write(td) && o->do_verify && o->numjobs > 1) {
                        log_info("Multiple writers may overwrite blocks that "
                                "belong to other jobs. This can cause "
@@ -724,12 +719,18 @@ void add_job_opts(const char **o)
 
 static int skip_this_section(const char *name)
 {
-       if (!job_section)
+       int i;
+
+       if (!nr_job_sections)
                return 0;
        if (!strncmp(name, "global", 6))
                return 0;
 
-       return strcmp(job_section, name);
+       for (i = 0; i < nr_job_sections; i++)
+               if (!strcmp(job_sections[i], name))
+                       return 0;
+
+       return 1;
 }
 
 static int is_empty_or_comment(char *line)
@@ -1039,8 +1040,6 @@ static int set_debug(const char *string)
        int i;
 
        if (!strcmp(string, "?") || !strcmp(string, "help")) {
-               int i;
-
                log_info("fio: dumping debug options:");
                for (i = 0; debug_levels[i].name; i++) {
                        dl = &debug_levels[i];
@@ -1157,7 +1156,7 @@ static int parse_cmd_line(int argc, char *argv[])
                        read_only = 1;
                        break;
                case 'v':
-                       /* already being printed, just quit */
+                       log_info("%s\n", fio_version_string);
                        exit(0);
                case 'e':
                        if (!strcmp("always", optarg))
@@ -1169,7 +1168,9 @@ static int parse_cmd_line(int argc, char *argv[])
                        if (set_debug(optarg))
                                do_exit++;
                        break;
-               case 'x':
+               case 'x': {
+                       size_t new_size;
+
                        if (!strcmp(optarg, "global")) {
                                log_err("fio: can't use global as only "
                                        "section\n");
@@ -1177,10 +1178,12 @@ static int parse_cmd_line(int argc, char *argv[])
                                exit_val = 1;
                                break;
                        }
-                       if (job_section)
-                               free(job_section);
-                       job_section = strdup(optarg);
+                       new_size = (nr_job_sections + 1) * sizeof(char *);
+                       job_sections = realloc(job_sections, new_size);
+                       job_sections[nr_job_sections] = strdup(optarg);
+                       nr_job_sections++;
                        break;
+                       }
                case 'p':
                        exec_profile = strdup(optarg);
                        break;
@@ -1251,8 +1254,6 @@ int parse_options(int argc, char *argv[])
        f_out = stdout;
        f_err = stderr;
 
-       log_info("%s\n", fio_version_string);
-
        fio_options_fill_optstring();
        fio_options_dup_and_init(l_opts);
 
@@ -1291,5 +1292,6 @@ int parse_options(int argc, char *argv[])
                fio_gtod_cpu = def_thread.o.gtod_cpu;
        }
 
+       log_info("%s\n", fio_version_string);
        return 0;
 }