path: root/file.h
diff options
authorChristian Ehrhardt <>2014-02-20 09:13:06 -0800
committerJens Axboe <>2014-02-20 09:13:06 -0800
commitbcbfeefa7bce8383cf85fe59ced91f54821dfbd2 (patch)
treea1e289accb5eecde6b6e86437a5c0594964d4328 /file.h
parent23ed19b0e10749dca2389511f78d89db886c064a (diff)
fio: add multi directory support
This patch adds support for ':' seperated multiple directories at the directory config statement in order to achieve an automatic distribution of job clones (numjob) across directories. That way people can distribute a load across these directories (usually mount points of disks) automatically - changing numjob will be sufficient to get all job clones evenly (optimal if dirs % numjobs = 0, otherwise as good as possible) distributed at all times. To avoid confused users old config Files will behave like they always did, old fio binaries using new config files won't abort but just use the first specified dir. If one specifies an explcit (non generated) filename the distribution to many directories is also deactivated. It also fixes an issue of events seeming out of order like when running with --debug=file seeing the "..." message meaning "I created the clones" prior to the last clone activities. Now the clones are called with index N-1 .. 1, zero being the base thread as before. Signed-off-by: Christian Ehrhardt <> Signed-off-by: Jens Axboe <>
Diffstat (limited to 'file.h')
1 files changed, 7 insertions, 1 deletions
diff --git a/file.h b/file.h
index c1d02a5b..d065a250 100644
--- a/file.h
+++ b/file.h
@@ -125,6 +125,11 @@ struct fio_file {
struct disk_util *du;
+struct file_name {
+ struct flist_head list;
+ char *filename;
#define FILE_FLAG_FNS(name) \
static inline void fio_file_set_##name(struct fio_file *f) \
{ \
@@ -162,7 +167,7 @@ extern int __must_check generic_close_file(struct thread_data *, struct fio_file
extern int __must_check generic_get_file_size(struct thread_data *, struct fio_file *);
extern int __must_check file_lookup_open(struct fio_file *f, int flags);
extern int __must_check pre_read_files(struct thread_data *);
-extern int add_file(struct thread_data *, const char *);
+extern int add_file(struct thread_data *, const char *, int);
extern int add_file_exclusive(struct thread_data *, const char *);
extern void get_file(struct fio_file *);
extern int __must_check put_file(struct thread_data *, struct fio_file *);
@@ -175,6 +180,7 @@ extern int init_random_map(struct thread_data *);
extern void dup_files(struct thread_data *, struct thread_data *);
extern int get_fileno(struct thread_data *, const char *);
extern void free_release_files(struct thread_data *);
+extern void filesetup_mem_free(void);
void fio_file_reset(struct thread_data *, struct fio_file *);
int fio_files_done(struct thread_data *);