static int str_fst_cb(void *, const char *);
static int str_filename_cb(void *, const char *);
static int str_directory_cb(void *, const char *);
+static int str_opendir_cb(void *, const char *);
#define __stringify_1(x) #x
#define __stringify(x) __stringify_1(x)
.cb = str_filename_cb,
.help = "File(s) to use for the workload",
},
+ {
+ .name = "opendir",
+ .type = FIO_OPT_STR_STORE,
+ .off1 = td_var_offset(opendir),
+ .cb = str_opendir_cb,
+ .help = "Recursively add files from this directory and down",
+ },
{
.name = "rw",
.type = FIO_OPT_STR,
static int def_timeout = 0;
-static char fio_version_string[] = "fio 1.13";
+static char fio_version_string[] = "fio 1.14";
static char **ini_file;
static int max_jobs = MAX_JOBS;
if (td->iodepth_batch > td->iodepth || !td->iodepth_batch)
td->iodepth_batch = td->iodepth;
- if (!td->nr_files)
- td->nr_files = td->files_index;
- else if (td->nr_files > td->files_index)
+ if (td->nr_files > td->files_index)
td->nr_files = td->files_index;
if (td->open_files > td->nr_files || !td->open_files)
if (td->odirect)
td->io_ops->flags |= FIO_RAWIO;
- if (!td->filename) {
+ if (!td->filename && !td->files_index) {
td->filename = strdup(jobname);
if (td->nr_files == 1)
strip_blank_front(&str);
strip_blank_end(str);
+ if (!td->files_index)
+ td->nr_files = 0;
+
while ((fname = strsep(&str, ":")) != NULL) {
if (!strlen(fname))
break;
add_file(td, fname);
+ td->nr_files++;
}
free(p);
return 0;
}
+static int str_opendir_cb(void *data, const char fio_unused *str)
+{
+ struct thread_data *td = data;
+
+ if (!td->files_index)
+ td->nr_files = 0;
+
+ return add_dir_files(td, td->opendir);
+}
+
/*
* This is our [ini] type file parser.
*/