Add 'per_job_logs' option
[fio.git] / init.c
diff --git a/init.c b/init.c
index 5e6d54f3e89a97c4a415e028b438e9419143e44d..f34e8182ce7d775b7ab36d0545135a978801d408 100644 (file)
--- a/init.c
+++ b/init.c
@@ -749,7 +749,7 @@ static int fixup_options(struct thread_data *td)
        /*
         * If randseed is set, that overrides randrepeat
         */
-       if (td->o.rand_seed)
+       if (fio_option_is_set(&td->o, rand_seed))
                td->o.rand_repeatable = 0;
 
        if ((td->io_ops->flags & FIO_NOEXTEND) && td->o.file_append) {
@@ -966,14 +966,10 @@ static int setup_random_seeds(struct thread_data *td)
        unsigned long seed;
        unsigned int i;
 
-       if (!td->o.rand_repeatable && !td->o.rand_seed)
+       if (!td->o.rand_repeatable && !fio_option_is_set(&td->o, rand_seed))
                return init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds));
 
-       if (!td->o.rand_seed)
-               seed = 0x89;
-       else
-               seed = td->o.rand_seed;
-
+       seed = td->o.rand_seed;
        for (i = 0; i < 4; i++)
                seed *= 0x9e370001UL;
 
@@ -1111,6 +1107,16 @@ int parse_dryrun(void)
        return dump_cmdline || parse_only;
 }
 
+static void gen_log_name(char *name, size_t size, const char *logtype,
+                        const char *logname, unsigned int num,
+                        const char *suf, int per_job)
+{
+       if (per_job)
+               snprintf(name, size, "%s_%s.%d.%s", logname, logtype, num, suf);
+       else
+               snprintf(name, size, "%s_%s.%s", logname, logtype, suf);
+}
+
 /*
  * Adds a job to the list of things todo. Sanitizes the various options
  * to make sure we don't have conflicts, and initializes various
@@ -1229,14 +1235,16 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                else
                        suf = "log";
 
-               snprintf(logname, sizeof(logname), "%s_lat.%d.%s",
-                               o->lat_log_file, td->thread_number, suf);
+               gen_log_name(logname, sizeof(logname), "lat", o->lat_log_file,
+                               td->thread_number, suf, o->per_job_logs);
                setup_log(&td->lat_log, &p, logname);
-               snprintf(logname, sizeof(logname), "%s_slat.%d.%s",
-                               o->lat_log_file, td->thread_number, suf);
+
+               gen_log_name(logname, sizeof(logname), "slat", o->lat_log_file,
+                               td->thread_number, suf, o->per_job_logs);
                setup_log(&td->slat_log, &p, logname);
-               snprintf(logname, sizeof(logname), "%s_clat.%d.%s",
-                               o->lat_log_file, td->thread_number, suf);
+
+               gen_log_name(logname, sizeof(logname), "clat", o->lat_log_file,
+                               td->thread_number, suf, o->per_job_logs);
                setup_log(&td->clat_log, &p, logname);
        }
        if (o->bw_log_file) {
@@ -1255,8 +1263,8 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                else
                        suf = "log";
 
-               snprintf(logname, sizeof(logname), "%s_bw.%d.%s",
-                               o->bw_log_file, td->thread_number, suf);
+               gen_log_name(logname, sizeof(logname), "bw", o->bw_log_file,
+                               td->thread_number, suf, o->per_job_logs);
                setup_log(&td->bw_log, &p, logname);
        }
        if (o->iops_log_file) {
@@ -1275,8 +1283,8 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
                else
                        suf = "log";
 
-               snprintf(logname, sizeof(logname), "%s_iops.%d.%s",
-                               o->iops_log_file, td->thread_number, suf);
+               gen_log_name(logname, sizeof(logname), "iops", o->iops_log_file,
+                               td->thread_number, suf, o->per_job_logs);
                setup_log(&td->iops_log, &p, logname);
        }
 
@@ -2245,7 +2253,7 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                        /* if --client parameter contains a pathname */
                        if (0 == access(optarg, R_OK)) {
                                /* file contains a list of host addrs or names */
-                               char hostaddr[_POSIX_HOST_NAME_MAX] = {0};
+                               char hostaddr[PATH_MAX] = {0};
                                char formatstr[8];
                                FILE * hostf = fopen(optarg, "r");
                                if (!hostf) {
@@ -2254,8 +2262,11 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                                        exit_val = 1;
                                        break;
                                }
-                               sprintf(formatstr, "%%%ds", _POSIX_HOST_NAME_MAX-1);
-                               /* read at most _POSIX_HOST_NAME_MAX-1 chars from each record in this file */
+                               sprintf(formatstr, "%%%ds", PATH_MAX - 1);
+                               /*
+                                * read at most PATH_MAX-1 chars from each
+                                * record in this file
+                                */
                                while (fscanf(hostf, formatstr, hostaddr) == 1) {
                                        /* expect EVERY host in file to be valid */
                                        if (fio_client_add(&fio_client_ops, hostaddr, &cur_client)) {