init: ensure that fatal errors in fixup_options are always propogated to caller
[fio.git] / init.c
diff --git a/init.c b/init.c
index 353c99bd56bfeeb1a1394b5d700b71087b2e6eae..8d382602f4539bd75a2d8bc493c0dd6d1176c1ac 100644 (file)
--- a/init.c
+++ b/init.c
@@ -600,7 +600,7 @@ static int fixup_options(struct thread_data *td)
                         " mutexes, forcing use of threads. Use the 'thread'"
                         " option to get rid of this warning.\n");
                o->use_thread = 1;
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
 #endif
 
@@ -608,7 +608,7 @@ static int fixup_options(struct thread_data *td)
                log_err("fio: read iolog overrides write_iolog\n");
                free(o->write_iolog_file);
                o->write_iolog_file = NULL;
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
 
        /*
@@ -662,7 +662,7 @@ static int fixup_options(struct thread_data *td)
            !o->norandommap) {
                log_err("fio: Any use of blockalign= turns off randommap\n");
                o->norandommap = 1;
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
 
        if (!o->file_size_high)
@@ -680,7 +680,7 @@ static int fixup_options(struct thread_data *td)
            && !fixed_block_size(o))  {
                log_err("fio: norandommap given for variable block sizes, "
                        "verify limited\n");
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
        if (o->bs_unaligned && (o->odirect || td_ioengine_flagged(td, FIO_RAWIO)))
                log_err("fio: bs_unaligned may not work with raw io\n");
@@ -724,7 +724,7 @@ static int fixup_options(struct thread_data *td)
                log_err("fio: checking for in-flight overlaps when the "
                        "io_submit_mode is offload is not supported\n");
                o->serialize_overlap = 0;
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
 
        if (o->nr_files > td->files_index)
@@ -738,7 +738,7 @@ static int fixup_options(struct thread_data *td)
            ((o->ratemin[DDIR_READ] + o->ratemin[DDIR_WRITE] + o->ratemin[DDIR_TRIM]) &&
            (o->rate_iops_min[DDIR_READ] + o->rate_iops_min[DDIR_WRITE] + o->rate_iops_min[DDIR_TRIM]))) {
                log_err("fio: rate and rate_iops are mutually exclusive\n");
-               ret = 1;
+               ret |= 1;
        }
        if ((o->rate[DDIR_READ] && (o->rate[DDIR_READ] < o->ratemin[DDIR_READ])) ||
            (o->rate[DDIR_WRITE] && (o->rate[DDIR_WRITE] < o->ratemin[DDIR_WRITE])) ||
@@ -747,13 +747,13 @@ static int fixup_options(struct thread_data *td)
            (o->rate_iops[DDIR_WRITE] && (o->rate_iops[DDIR_WRITE] < o->rate_iops_min[DDIR_WRITE])) ||
            (o->rate_iops[DDIR_TRIM] && (o->rate_iops[DDIR_TRIM] < o->rate_iops_min[DDIR_TRIM]))) {
                log_err("fio: minimum rate exceeds rate\n");
-               ret = 1;
+               ret |= 1;
        }
 
        if (!o->timeout && o->time_based) {
                log_err("fio: time_based requires a runtime/timeout setting\n");
                o->time_based = 0;
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
 
        if (o->fill_device && !o->size)
@@ -769,7 +769,7 @@ static int fixup_options(struct thread_data *td)
                        log_info("fio: multiple writers may overwrite blocks "
                                "that belong to other jobs. This can cause "
                                "verification failures.\n");
-                       ret = warnings_fatal;
+                       ret |= warnings_fatal;
                }
 
                /*
@@ -781,7 +781,7 @@ static int fixup_options(struct thread_data *td)
                        log_info("fio: verification read phase will never "
                                 "start because write phase uses all of "
                                 "runtime\n");
-                       ret = warnings_fatal;
+                       ret |= warnings_fatal;
                }
 
                if (!fio_option_is_set(o, refill_buffers))
@@ -817,7 +817,7 @@ static int fixup_options(struct thread_data *td)
                if (td_ioengine_flagged(td, FIO_PIPEIO)) {
                        log_info("fio: cannot pre-read files with an IO engine"
                                 " that isn't seekable. Pre-read disabled.\n");
-                       ret = warnings_fatal;
+                       ret |= warnings_fatal;
                }
        }
 
@@ -841,7 +841,7 @@ static int fixup_options(struct thread_data *td)
                         " this warning\n");
                o->fsync_blocks = o->fdatasync_blocks;
                o->fdatasync_blocks = 0;
-               ret = warnings_fatal;
+               ret |= warnings_fatal;
        }
 #endif
 
@@ -854,7 +854,7 @@ static int fixup_options(struct thread_data *td)
                log_err("fio: Windows does not support direct or non-buffered io with"
                                " the synchronous ioengines. Use the 'windowsaio' ioengine"
                                " with 'direct=1' and 'iodepth=1' instead.\n");
-               ret = 1;
+               ret |= 1;
        }
 #endif
 
@@ -887,7 +887,7 @@ static int fixup_options(struct thread_data *td)
        if (o->size && o->size < td_min_bs(td)) {
                log_err("fio: size too small, must not be less than minimum block size: %llu < %u\n",
                        (unsigned long long) o->size, td_min_bs(td));
-               ret = 1;
+               ret |= 1;
        }
 
        /*
@@ -904,7 +904,7 @@ static int fixup_options(struct thread_data *td)
 
        if (td_ioengine_flagged(td, FIO_NOEXTEND) && o->file_append) {
                log_err("fio: can't append/extent with IO engine %s\n", td->io_ops->name);
-               ret = 1;
+               ret |= 1;
        }
 
        if (fio_option_is_set(o, gtod_cpu)) {
@@ -921,7 +921,7 @@ static int fixup_options(struct thread_data *td)
                log_err("fio: block error histogram only available "
                        "with a single file per job, but %d files "
                        "provided\n", o->nr_files);
-               ret = 1;
+               ret |= 1;
        }
 
        if (fio_option_is_set(o, clat_percentiles) &&
@@ -935,7 +935,7 @@ static int fixup_options(struct thread_data *td)
                   o->lat_percentiles && o->clat_percentiles) {
                log_err("fio: lat_percentiles and clat_percentiles are "
                        "mutually exclusive\n");
-               ret = 1;
+               ret |= 1;
        }
 
        if (o->disable_lat)