One more missed s/td->filename/fn_given
[fio.git] / init.c
diff --git a/init.c b/init.c
index bca8424a9e49348c05b99a272c9d96789b469559..4bea304e449c90235c2710dab8190f312f54cdad 100644 (file)
--- a/init.c
+++ b/init.c
@@ -30,6 +30,7 @@ static int str_prioclass_cb(void *, unsigned int *);
 #endif
 static int str_exitall_cb(void);
 static int str_cpumask_cb(void *, unsigned int *);
+static int str_fst_cb(void *, const char *);
 
 #define __stringify_1(x)       #x
 #define __stringify(x)         __stringify_1(x)
@@ -190,6 +191,7 @@ static struct fio_option options[] = {
        {
                .name   = "file_service_type",
                .type   = FIO_OPT_STR,
+               .cb     = str_fst_cb,
                .off1   = td_var_offset(file_service_type),
                .help   = "How to select which file to service next",
                .def    = "roundrobin",
@@ -802,6 +804,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
        int numjobs, i;
        struct fio_file *f;
        const char *engine;
+       int fn_given;
 
        /*
         * the def_thread is just for options, it's not a real job
@@ -816,9 +819,15 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
                return 1;
        }
 
+       if (td->use_thread)
+               nr_thread++;
+       else
+               nr_process++;
+
        if (td->odirect)
                td->io_ops->flags |= FIO_RAWIO;
 
+       fn_given = (int) td->filename;
        if (!td->filename)
                td->filename = strdup(jobname);
 
@@ -832,12 +841,12 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
 
        fixup_options(td);
 
-       if (td->filename)
+       if (fn_given)
                td->nr_uniq_files = 1;
        else
                td->nr_uniq_files = td->open_files;
 
-       if (td->filetype == FIO_TYPE_FILE || td->filename) {
+       if (td->filetype == FIO_TYPE_FILE) {
                char tmp[PATH_MAX];
                int len = 0;
 
@@ -860,10 +869,10 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
                        memset(f, 0, sizeof(*f));
                        f->fd = -1;
 
-                       if (td->filename)
+                       if (fn_given)
                                sprintf(tmp + len, "%s", td->filename);
                        else
-                               sprintf(tmp + len, "%s.%d.%d", jobname, td->thread_number, i);
+                               sprintf(tmp + len, "%s.%d.%d", td->filename, td->thread_number, i);
                        f->file_name = strdup(tmp);
                }
        } else {
@@ -1043,7 +1052,7 @@ static int is_empty_or_comment(char *line)
 /*
  * Check if mmap/mmaphuge has a :/foo/bar/file at the end. If so, return that.
  */
-static char *get_mmap_file(const char *str)
+static char *get_opt_postfix(const char *str)
 {
        char *p = strstr(str, ":");
 
@@ -1061,7 +1070,7 @@ static int str_mem_cb(void *data, const char *mem)
        struct thread_data *td = data;
 
        if (td->mem_type == MEM_MMAPHUGE || td->mem_type == MEM_MMAP) {
-               td->mmapfile = get_mmap_file(mem);
+               td->mmapfile = get_opt_postfix(mem);
                if (td->mem_type == MEM_MMAPHUGE && !td->mmapfile) {
                        log_err("fio: mmaphuge:/path/to/file\n");
                        return 1;
@@ -1109,6 +1118,18 @@ static int str_cpumask_cb(void *data, unsigned int *val)
        return 0;
 }
 
+static int str_fst_cb(void *data, const char *str)
+{
+       struct thread_data *td = data;
+       char *nr = get_opt_postfix(str);
+
+       td->file_service_nr = 1;
+       if (nr)
+               td->file_service_nr = atoi(nr);
+
+       return 0;
+}
+
 /*
  * This is our [ini] type file parser.
  */