return false;
for_each_file(td, f, i) {
- if (f->filetype != FIO_TYPE_BD)
+ if (f->filetype != FIO_TYPE_BLOCK)
continue;
if (device_is_mounted(f->file_name))
goto mounted;
if (ret)
return 1;
- if (f->filetype != FIO_TYPE_BD) {
+ if (f->filetype != FIO_TYPE_BLOCK) {
log_err("fio: binject only works with block devices\n");
goto err_close;
}
}
#ifdef FIO_MADV_FREE
- if (f->filetype == FIO_TYPE_BD)
+ if (f->filetype == FIO_TYPE_BLOCK)
(void) posix_madvise(fmd->mmap_ptr, fmd->mmap_sz, FIO_MADV_FREE);
#endif
struct fio_file *f = io_u->file;
int ret;
- if (f->filetype == FIO_TYPE_BD) {
+ if (f->filetype == FIO_TYPE_BLOCK) {
ret = fio_sgio_ioctl_doio(td, f, io_u);
td->error = io_u->error;
} else {
unsigned int bs = 0;
unsigned long long max_lba = 0;
- if (f->filetype == FIO_TYPE_BD) {
+ if (f->filetype == FIO_TYPE_BLOCK) {
if (ioctl(f->fd, BLKSSZGET, &bs) < 0) {
td_verror(td, errno, "ioctl");
return 1;
MAX_10B_LBA, max_lba);
}
- if (f->filetype == FIO_TYPE_BD) {
+ if (f->filetype == FIO_TYPE_BLOCK) {
td->io_ops->getevents = NULL;
td->io_ops->event = NULL;
}
if (fio_file_size_known(f))
return 0;
- if (f->filetype != FIO_TYPE_BD && f->filetype != FIO_TYPE_CHAR) {
+ if (f->filetype != FIO_TYPE_BLOCK && f->filetype != FIO_TYPE_CHAR) {
td_verror(td, EINVAL, "wrong file type");
log_err("ioengine sg only works on block or character devices\n");
return 1;
*/
enum fio_filetype {
FIO_TYPE_FILE = 1, /* plain file */
- FIO_TYPE_BD, /* block device */
+ FIO_TYPE_BLOCK, /* block device */
FIO_TYPE_CHAR, /* character device */
FIO_TYPE_PIPE, /* pipe */
};
if (f->filetype == FIO_TYPE_FILE)
ret = file_size(td, f);
- else if (f->filetype == FIO_TYPE_BD)
+ else if (f->filetype == FIO_TYPE_BLOCK)
ret = bdev_size(td, f);
else if (f->filetype == FIO_TYPE_CHAR)
ret = char_size(td, f);
ret = posix_fadvise(f->fd, off, len, POSIX_FADV_DONTNEED);
if (ret)
errval = ret;
- } else if (f->filetype == FIO_TYPE_BD) {
+ } else if (f->filetype == FIO_TYPE_BLOCK) {
int retry_count = 0;
ret = blockdev_invalidate_cache(f);
struct stat sb;
char buf[256];
- if (f->filetype == FIO_TYPE_BD || f->filetype == FIO_TYPE_CHAR) {
+ if (f->filetype == FIO_TYPE_BLOCK || f->filetype == FIO_TYPE_CHAR) {
if (f->real_file_size != -1ULL)
ret += f->real_file_size;
continue;
/* \\.\ is the device namespace in Windows, where every file is
* a block device */
if (strncmp(f->file_name, "\\\\.\\", 4) == 0)
- f->filetype = FIO_TYPE_BD;
+ f->filetype = FIO_TYPE_BLOCK;
#endif
if (!stat(f->file_name, &sb)) {
if (S_ISBLK(sb.st_mode))
- f->filetype = FIO_TYPE_BD;
+ f->filetype = FIO_TYPE_BLOCK;
else if (S_ISCHR(sb.st_mode))
f->filetype = FIO_TYPE_CHAR;
else if (S_ISFIFO(sb.st_mode))
extern void fio_options_set_ioengine_opts(struct option *long_options, struct thread_data *td);
extern void fio_options_dup_and_init(struct option *);
extern void fio_options_mem_dupe(struct thread_data *);
-extern void options_mem_dupe(void *data, struct fio_option *options);
extern void td_fill_rand_seeds(struct thread_data *);
extern void td_fill_verify_state_seed(struct thread_data *);
extern void add_job_opts(const char **, int);
*/
if (origeo) {
memcpy(td->eo, origeo, td->io_ops->option_struct_size);
- options_mem_dupe(td->eo, td->io_ops->options);
+ options_mem_dupe(td->io_ops->options, td->eo);
} else {
memset(td->eo, 0, td->io_ops->option_struct_size);
fill_default_options(td->eo, td->io_ops->options);
}
out_free:
- if (pid_file)
- free(pid_file);
-
return ini_idx;
}
if (did_arg)
return 0;
- log_err("No jobs(s) defined\n\n");
+ log_err("No job(s) defined\n\n");
if (!did_arg) {
usage(argv[0]);
goto err;
if (td->o.fadvise_hint != F_ADV_NONE &&
- (f->filetype == FIO_TYPE_BD || f->filetype == FIO_TYPE_FILE)) {
+ (f->filetype == FIO_TYPE_BLOCK || f->filetype == FIO_TYPE_FILE)) {
int flags;
if (td->o.fadvise_hint == F_ADV_TYPE) {
}
#ifdef FIO_HAVE_STREAMID
if (td->o.fadvise_stream &&
- (f->filetype == FIO_TYPE_BD || f->filetype == FIO_TYPE_FILE)) {
+ (f->filetype == FIO_TYPE_BLOCK || f->filetype == FIO_TYPE_FILE)) {
off_t stream = td->o.fadvise_stream;
if (posix_fadvise(f->fd, stream, f->io_size, POSIX_FADV_STREAMID) < 0) {
{
struct flist_head *entry;
struct thread_data td;
+ struct ioengine_ops *io_ops;
char *sep;
int ret = 1;
if (!engine || !*engine) {
log_info("Available IO engines:\n");
flist_for_each(entry, &engine_list) {
- td.io_ops = flist_entry(entry, struct ioengine_ops,
- list);
- log_info("\t%s\n", td.io_ops->name);
+ io_ops = flist_entry(entry, struct ioengine_ops, list);
+ log_info("\t%s\n", io_ops->name);
}
return 0;
}
memset(&td, 0, sizeof(td));
- td.io_ops = load_ioengine(&td, engine);
- if (!td.io_ops) {
+ io_ops = load_ioengine(&td, engine);
+ if (!io_ops) {
log_info("IO engine %s not found\n", engine);
return 1;
}
- if (td.io_ops->options)
- ret = show_cmd_help(td.io_ops->options, sep);
+ if (io_ops->options)
+ ret = show_cmd_help(io_ops->options, sep);
else
- log_info("IO engine %s has no options\n", td.io_ops->name);
+ log_info("IO engine %s has no options\n", io_ops->name);
free_ioengine(&td);
return show_cmd_help(fio_options, opt);
}
-void options_mem_dupe(void *data, struct fio_option *options)
-{
- struct fio_option *o;
- char **ptr;
-
- for (o = &options[0]; o->name; o++) {
- if (o->type != FIO_OPT_STR_STORE)
- continue;
-
- ptr = td_var(data, o, o->off1);
- if (*ptr)
- *ptr = strdup(*ptr);
- }
-}
-
/*
* dupe FIO_OPT_STR_STORE options
*/
void fio_options_mem_dupe(struct thread_data *td)
{
- options_mem_dupe(&td->o, fio_options);
+ options_mem_dupe(fio_options, &td->o);
if (td->eo && td->io_ops) {
void *oldeo = td->eo;
td->eo = malloc(td->io_ops->option_struct_size);
memcpy(td->eo, oldeo, td->io_ops->option_struct_size);
- options_mem_dupe(td->eo, td->io_ops->options);
+ options_mem_dupe(td->io_ops->options, td->eo);
}
}
}
}
+void options_mem_dupe(struct fio_option *options, void *data)
+{
+ struct fio_option *o;
+ char **ptr;
+
+ dprint(FD_PARSE, "dup options\n");
+
+ for (o = &options[0]; o->name; o++) {
+ if (o->type != FIO_OPT_STR_STORE)
+ continue;
+
+ ptr = td_var(data, o, o->off1);
+ if (*ptr)
+ *ptr = strdup(*ptr);
+ }
+}
+
void options_free(struct fio_option *options, void *data)
{
struct fio_option *o;
extern int show_cmd_help(struct fio_option *, const char *);
extern void fill_default_options(void *, struct fio_option *);
extern void options_init(struct fio_option *);
+extern void options_mem_dupe(struct fio_option *, void *);
extern void options_free(struct fio_option *, void *);
extern void strip_blank_front(char **);
typedef int (fio_opt_int_fn)(void *, int *);
struct thread_options;
-static inline void *td_var(struct thread_options *to, struct fio_option *o,
- unsigned int offset)
+static inline void *td_var(void *to, struct fio_option *o, unsigned int offset)
{
void *ret;