From 2fd233b7302603fb6fd9b7098994d2a155cf7a22 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Fri, 2 Mar 2007 08:44:25 +0100 Subject: [PATCH] Convert null io engine to use ->setup() Then we can get rid of the NULLIO flags hack Signed-off-by: Jens Axboe --- engines/cpu.c | 2 +- engines/null.c | 26 +++++++++++++++++++++- filesetup.c | 58 +++++++++++++++++--------------------------------- fio.h | 1 - 4 files changed, 46 insertions(+), 41 deletions(-) diff --git a/engines/cpu.c b/engines/cpu.c index 6ad547b6..c89a4c9e 100644 --- a/engines/cpu.c +++ b/engines/cpu.c @@ -24,7 +24,7 @@ static struct ioengine_ops ioengine = { .version = FIO_IOOPS_VERSION, .init = fio_cpuio_init, .setup = fio_cpuio_setup, - .flags = FIO_CPUIO | FIO_NULLIO, + .flags = FIO_CPUIO, }; static void fio_init fio_cpuio_register(void) diff --git a/engines/null.c b/engines/null.c index 6db1ad6d..695afa11 100644 --- a/engines/null.c +++ b/engines/null.c @@ -18,11 +18,35 @@ static int fio_null_queue(struct thread_data fio_unused *td, struct io_u *io_u) return FIO_Q_COMPLETED; } +static int fio_null_setup(struct thread_data *td) +{ + struct fio_file *f; + int i; + + if (!td->total_file_size) { + log_err("fio: need size= set\n"); + return 1; + } + + td->io_size = td->total_file_size; + td->total_io_size = td->io_size; + + for_each_file(td, f, i) { + f->fd = dup(STDOUT_FILENO); + f->real_file_size = td->total_io_size / td->nr_files; + f->file_size = f->real_file_size; + } + + td->nr_open_files = td->nr_files; + return 0; +} + static struct ioengine_ops ioengine = { .name = "null", .version = FIO_IOOPS_VERSION, + .setup = fio_null_setup, .queue = fio_null_queue, - .flags = FIO_SYNCIO | FIO_NULLIO | FIO_DISKLESSIO, + .flags = FIO_SYNCIO | FIO_DISKLESSIO | FIO_SELFOPEN, }; static void fio_init fio_null_register(void) diff --git a/filesetup.c b/filesetup.c index 850dc2f0..502d79f8 100644 --- a/filesetup.c +++ b/filesetup.c @@ -39,7 +39,7 @@ static int file_ok(struct thread_data *td, struct fio_file *f) { struct stat st; - if (td->filetype != FIO_TYPE_FILE || (td->io_ops->flags & FIO_NULLIO)) + if (td->filetype != FIO_TYPE_FILE) return 0; if (lstat(f->file_name, &st) == -1) @@ -183,16 +183,6 @@ static int file_size(struct thread_data *td, struct fio_file *f) { struct stat st; - /* - * if we are not doing real io, just pretend the file is as large - * as the size= given. this works fine with nrfiles > 1 as well, - * we only really care about it being at least as big as size= - */ - if (td->io_ops->flags & FIO_NULLIO) { - f->real_file_size = f->file_size = td->total_file_size; - return 0; - } - if (td->overwrite) { if (fstat(f->fd, &st) == -1) { td_verror(td, errno, "fstat"); @@ -374,37 +364,29 @@ static int setup_file(struct thread_data *td, struct fio_file *f) if (td->io_ops->flags & FIO_SELFOPEN) return 0; - /* - * we need a valid file descriptor, but don't create a real file. - * lets just dup stdout, seems like a sensible approach. - */ - if (td->io_ops->flags & FIO_NULLIO) - f->fd = dup(STDOUT_FILENO); - else { - if (td->odirect) - flags |= OS_O_DIRECT; - if (td->sync_io) - flags |= O_SYNC; - - if (td_write(td) || td_rw(td)) { - flags |= O_RDWR; - - if (td->filetype == FIO_TYPE_FILE) { - if (!td->overwrite) - flags |= O_TRUNC; + if (td->odirect) + flags |= OS_O_DIRECT; + if (td->sync_io) + flags |= O_SYNC; - flags |= O_CREAT; - } + if (td_write(td) || td_rw(td)) { + flags |= O_RDWR; - open_file(td, f, flags, 0600); - } else { - if (td->filetype == FIO_TYPE_CHAR) - flags |= O_RDWR; - else - flags |= O_RDONLY; + if (td->filetype == FIO_TYPE_FILE) { + if (!td->overwrite) + flags |= O_TRUNC; - open_file(td, f, flags, 0); + flags |= O_CREAT; } + + open_file(td, f, flags, 0600); + } else { + if (td->filetype == FIO_TYPE_CHAR) + flags |= O_RDWR; + else + flags |= O_RDONLY; + + open_file(td, f, flags, 0); } if (f->fd == -1) { diff --git a/fio.h b/fio.h index efc9e519..dd1fc62b 100644 --- a/fio.h +++ b/fio.h @@ -216,7 +216,6 @@ enum fio_ioengine_flags { FIO_RAWIO = 1 << 3, /* some sort of direct/raw io */ FIO_DISKLESSIO = 1 << 4, /* no disk involved */ FIO_SELFOPEN = 1 << 5, /* opens its own devices */ - FIO_NULLIO = 1 << 6, /* no real data transfer (cpu/null) */ }; /* -- 2.25.1