Add 'opendir' option
This option adds all files from a directory and downward in the
filesystem hierarchy.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/init.c b/init.c
index cf66ec0..ee0f36f 100644
--- a/init.c
+++ b/init.c
@@ -33,6 +33,7 @@
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)
@@ -68,6 +69,13 @@
.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,
.off1 = td_var_offset(td_ddir),
@@ -759,9 +767,7 @@
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)
@@ -839,7 +845,7 @@
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)
@@ -1121,10 +1127,14 @@
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);
@@ -1149,6 +1159,16 @@
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.
*/