[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 f65f91d9e0f988e17e7d426bdde81f778a7bf14b..27ec6da1f261575bdd98999cacb81184e2c78d77 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 fc829473acc39bc8b494bde47ba59012cf3de145..7b4b217679bc1d950c02c8b3c5e8a5a03acd4ae2 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 610981b437594d32c90587178b323c2ce6dcc348..1f1259d1ac156bd99666b73e8a6a71ecdd4d28ee 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 56ed248551a5f6158dedf99eb0e4033f2bf0bf2d..e42d67bb137d721b92936e1249176c5ceabfee15 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 a98539fc3fc6279cf288524fbd4baf5d5b3212fc..a9e87aa7cc35d32263d79965fa8ea94365d8e9d2 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;
 
        /*