Micro-optimize num2str()
[fio.git] / init.c
diff --git a/init.c b/init.c
index 3ed57570c7e09e72f138d87536fc93c03f28b5fa..09f58a3538d4c4b28974bfc64b384ab111420e19 100644 (file)
--- a/init.c
+++ b/init.c
@@ -618,17 +618,34 @@ static int fixup_options(struct thread_data *td)
                ret |= warnings_fatal;
        }
 
+       if (o->zone_mode == ZONE_MODE_NONE && o->zone_size) {
+               log_err("fio: --zonemode=none and --zonesize are not compatible.\n");
+               ret |= 1;
+       }
+
+       if (o->zone_mode == ZONE_MODE_STRIDED && !o->zone_size) {
+               log_err("fio: --zonesize must be specified when using --zonemode=strided.\n");
+               ret |= 1;
+       }
+
+       if (o->zone_mode == ZONE_MODE_NOT_SPECIFIED) {
+               if (o->zone_size)
+                       o->zone_mode = ZONE_MODE_STRIDED;
+               else
+                       o->zone_mode = ZONE_MODE_NONE;
+       }
+
        /*
-        * only really works with 1 file
+        * Strided zone mode only really works with 1 file.
         */
-       if (o->zone_size && o->open_files > 1)
-               o->zone_size = 0;
+       if (o->zone_mode == ZONE_MODE_STRIDED && o->open_files > 1)
+               o->zone_mode = ZONE_MODE_NONE;
 
        /*
         * If zone_range isn't specified, backward compatibility dictates it
         * should be made equal to zone_size.
         */
-       if (o->zone_size && !o->zone_range)
+       if (o->zone_mode == ZONE_MODE_STRIDED && !o->zone_range)
                o->zone_range = o->zone_size;
 
        /*
@@ -1401,6 +1418,17 @@ static bool wait_for_ok(const char *jobname, struct thread_options *o)
        return true;
 }
 
+/*
+ * Treat an empty log file name the same as a one not given
+ */
+static const char *make_log_name(const char *logname, const char *jobname)
+{
+       if (logname && strcmp(logname, ""))
+               return logname;
+
+       return jobname;
+}
+
 /*
  * Adds a job to the list of things todo. Sanitizes the various options
  * to make sure we don't have conflicts, and initializes various
@@ -1525,7 +1553,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
-               const char *pre = o->lat_log_file ? o->lat_log_file : o->name;
+               const char *pre = make_log_name(o->lat_log_file, o->name);
                const char *suf;
 
                if (p.log_gz_store)
@@ -1544,6 +1572,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                gen_log_name(logname, sizeof(logname), "clat", pre,
                                td->thread_number, suf, o->per_job_logs);
                setup_log(&td->clat_log, &p, logname);
+
        }
 
        if (o->write_hist_log) {
@@ -1557,7 +1586,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
-               const char *pre = o->hist_log_file ? o->hist_log_file : o->name;
+               const char *pre = make_log_name(o->hist_log_file, o->name);
                const char *suf;
 
 #ifndef CONFIG_ZLIB
@@ -1588,7 +1617,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
-               const char *pre = o->bw_log_file ? o->bw_log_file : o->name;
+               const char *pre = make_log_name(o->bw_log_file, o->name);
                const char *suf;
 
                if (fio_option_is_set(o, bw_avg_time))
@@ -1619,7 +1648,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                        .log_gz = o->log_gz,
                        .log_gz_store = o->log_gz_store,
                };
-               const char *pre = o->iops_log_file ? o->iops_log_file : o->name;
+               const char *pre = make_log_name(o->iops_log_file, o->name);
                const char *suf;
 
                if (fio_option_is_set(o, iops_avg_time))
@@ -2263,6 +2292,10 @@ const struct debug_level debug_levels[] = {
          .help = "Helper thread logging",
          .shift = FD_HELPERTHREAD,
        },
+       { .name = "zbd",
+         .help = "Zoned Block Device logging",
+         .shift = FD_ZBD,
+       },
        { .name = NULL, },
 };