that will be done. The actual job contents are not
executed.
+allow_file_create=bool If true, fio is permitted to create files as part
+ of its workload. This is the default behavior. If this
+ option is false, then fio will error out if the files it
+ needs to use don't already exist. Default: true.
+
pre_read=bool If this is given, files will be pre-read into memory before
starting the given IO operation. This will also clear
the 'invalidate' flag, since it is pointless to pre-read
string_to_cpu(&o->profile, top->profile);
string_to_cpu(&o->cgroup, top->cgroup);
+ o->allow_create = le32_to_cpu(top->allow_create);
o->td_ddir = le32_to_cpu(top->td_ddir);
o->rw_seq = le32_to_cpu(top->rw_seq);
o->kb_base = le32_to_cpu(top->kb_base);
string_to_net(top->profile, o->profile);
string_to_net(top->cgroup, o->cgroup);
+ top->allow_create = cpu_to_le32(o->allow_create);
top->td_ddir = cpu_to_le32(o->td_ddir);
top->rw_seq = cpu_to_le32(o->rw_seq);
top->kb_base = cpu_to_le32(o->kb_base);
}
}
- flags = O_WRONLY | O_CREAT;
+ flags = O_WRONLY;
+ if (td->o.allow_create)
+ flags |= O_CREAT;
if (new_layout)
flags |= O_TRUNC;
dprint(FD_FILE, "open file %s, flags %x\n", f->file_name, flags);
f->fd = open(f->file_name, flags, 0644);
if (f->fd < 0) {
- td_verror(td, errno, "open");
+ int err = errno;
+
+ if (err == ENOENT && !td->o.allow_create)
+ log_err("fio: file creation disallowed by "
+ "allow_file_create=0\n");
+ else
+ td_verror(td, err, "open");
return 1;
}
}
if (td->o.sync_io)
flags |= O_SYNC;
- if (td->o.create_on_open)
+ if (td->o.create_on_open && td->o.allow_create)
flags |= O_CREAT;
skip_flags:
if (f->filetype != FIO_TYPE_FILE)
if (!read_only)
flags |= O_RDWR;
- if (f->filetype == FIO_TYPE_FILE)
+ if (f->filetype == FIO_TYPE_FILE && td->o.allow_create)
flags |= O_CREAT;
if (is_std)
laid out or updated on disk, only that will be done. The actual job contents
are not executed.
.TP
+.BI allow_file_create \fR=\fPbool
+If true, fio is permitted to create files as part of its workload. This is
+the default behavior. If this option is false, then fio will error out if the
+files it needs to use don't already exist. Default: true.
+.TP
.BI pre_read \fR=\fPbool
If this is given, files will be pre-read into memory before starting the given
IO operation. This will also clear the \fR \fBinvalidate\fR flag, since it is
.category = FIO_OPT_C_FILE,
.def = "0",
},
+ {
+ .name = "allow_file_create",
+ .type = FIO_OPT_BOOL,
+ .off1 = td_var_offset(allow_create),
+ .help = "Permit fio to create files, if they don't exist",
+ .def = "1",
+ .category = FIO_OPT_C_FILE,
+ .group = FIO_OPT_G_FILENAME,
+ },
{
.name = "pre_read",
.lname = "Pre-read files",
};
enum {
- FIO_SERVER_VER = 44,
+ FIO_SERVER_VER = 45,
FIO_SERVER_MAX_FRAGMENT_PDU = 1024,
FIO_SERVER_MAX_CMD_MB = 2048,
unsigned int replay_scale;
unsigned int per_job_logs;
+
+ unsigned int allow_create;
};
#define FIO_TOP_STR_MAX 256
uint32_t replay_scale;
uint32_t per_job_logs;
+
+ uint32_t allow_create;
} __attribute__((packed));
extern void convert_thread_options_to_cpu(struct thread_options *o, struct thread_options_pack *top);