[PATCH] Don't create files for engines that don't need them
authorJens Axboe <jens.axboe@oracle.com>
Wed, 7 Feb 2007 12:14:57 +0000 (13:14 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Wed, 7 Feb 2007 12:14:57 +0000 (13:14 +0100)
Introduce FIO_NULLIO as a way to control that from the io engine.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
engines/cpu.c
engines/null.c
filesetup.c
fio.h
stat.c

index f65f91d..27ec6da 100644 (file)
@@ -24,7 +24,7 @@ static struct ioengine_ops ioengine = {
        .version        = FIO_IOOPS_VERSION,
        .init           = fio_cpuio_init,
        .setup          = fio_cpuio_setup,
-       .flags          = FIO_CPUIO,
+       .flags          = FIO_CPUIO | FIO_NULLIO,
 };
 
 static void fio_init fio_cpuio_register(void)
index fc82947..7b4b217 100644 (file)
@@ -70,7 +70,7 @@ static struct ioengine_ops ioengine = {
        .getevents      = fio_null_getevents,
        .event          = fio_null_event,
        .cleanup        = fio_null_cleanup,
-       .flags          = FIO_SYNCIO,
+       .flags          = FIO_SYNCIO | FIO_NULLIO,
 };
 
 static void fio_init fio_null_register(void)
index 610981b..1f1259d 100644 (file)
@@ -15,7 +15,7 @@ static int file_ok(struct thread_data *td, struct fio_file *f)
 {
        struct stat st;
 
-       if (td->filetype != FIO_TYPE_FILE)
+       if (td->filetype != FIO_TYPE_FILE || (td->io_ops->flags & FIO_NULLIO))
                return 0;
 
        if (stat(f->file_name, &st) == -1)
@@ -332,29 +332,38 @@ static int setup_file(struct thread_data *td, struct fio_file *f)
 
        if (td->io_ops->flags & FIO_NETIO)
                return 0;
-       if (td->odirect)
-               flags |= OS_O_DIRECT;
-       if (td->sync_io)
-               flags |= O_SYNC;
 
-       if (td_write(td) || td_rw(td)) {
-               flags |= O_RDWR;
+       /*
+        * 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->filetype == FIO_TYPE_FILE) {
+                               if (!td->overwrite)
+                                       flags |= O_TRUNC;
 
-                       flags |= O_CREAT;
-               }
+                               flags |= O_CREAT;
+                       }
 
-               f->fd = open(f->file_name, flags, 0600);
-       } else {
-               if (td->filetype == FIO_TYPE_CHAR)
-                       flags |= O_RDWR;
-               else
-                       flags |= O_RDONLY;
+                       f->fd = open(f->file_name, flags, 0600);
+               } else {
+                       if (td->filetype == FIO_TYPE_CHAR)
+                               flags |= O_RDWR;
+                       else
+                               flags |= O_RDONLY;
 
-               f->fd = open(f->file_name, flags);
+                       f->fd = open(f->file_name, flags);
+               }
        }
 
        if (f->fd == -1) {
diff --git a/fio.h b/fio.h
index 56ed248..e42d67b 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -147,6 +147,7 @@ enum fio_ioengine_flags {
        FIO_MMAPIO      = 1 << 2,
        FIO_RAWIO       = 1 << 3,
        FIO_NETIO       = 1 << 4,
+       FIO_NULLIO      = 1 << 5,
 };
 
 struct fio_file {
diff --git a/stat.c b/stat.c
index a98539f..a9e87aa 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -205,7 +205,7 @@ void init_disk_util(struct thread_data *td)
        dev_t dev;
        char *p;
 
-       if (!td->do_disk_util || (td->io_ops->flags & FIO_NETIO))
+       if (!td->do_disk_util || (td->io_ops->flags & (FIO_NETIO | FIO_NULLIO)))
                return;
 
        /*