[dbench @ tridge@samba.org-20070727060117-mjnjs3nd4ca15xbm]
authorAndrew Tridgell <tridge@samba.org>
Fri, 27 Jul 2007 06:01:17 +0000 (16:01 +1000)
committerAndrew Tridgell <tridge@samba.org>
Fri, 27 Jul 2007 06:01:17 +0000 (16:01 +1000)
added --fake-io for fast testing

dbench.c
dbench.h
fileio.c

index 0095f03..d677555 100644 (file)
--- a/dbench.c
+++ b/dbench.c
@@ -390,6 +390,8 @@ static int process_opts(int argc, const char **argv)
                  "try to fix 1 byte writes", NULL },
                { "stat-check", 0, POPT_ARG_NONE, &options.stat_check, 0, 
                  "check for pointless calls with stat", NULL },
+               { "fake-io", 0, POPT_ARG_NONE, &options.fake_io, 0, 
+                 "fake up read/write calls", NULL },
                POPT_TABLEEND
        };
        poptContext pc;
index e61ef26..75d8d5b 100644 (file)
--- a/dbench.h
+++ b/dbench.h
@@ -158,6 +158,7 @@ struct options {
        int clients_per_process;
        int one_byte_write_fix;
        int stat_check;
+       int fake_io;
 };
 
 /* CreateDisposition field. */
index 4dc0a64..22a79b1 100644 (file)
--- a/fileio.c
+++ b/fileio.c
@@ -157,10 +157,6 @@ static void resolve_name(struct child_struct *child, const char *name)
        char *p;
        struct dirent *d;
 
-       if (options.no_resolve) {
-               return;
-       }
-
        if (name == NULL) return;
 
        if (stat(name, &st) == 0) {
@@ -168,6 +164,10 @@ static void resolve_name(struct child_struct *child, const char *name)
                return;
        }
 
+       if (options.no_resolve) {
+               return;
+       }
+
        dname = strdup(name);
        p = strrchr(dname, '/');
        if (!p) return;
@@ -274,7 +274,9 @@ void nb_createx(struct child_struct *child, const char *fname,
 
        if (create_options & FILE_DIRECTORY_FILE) {
                /* not strictly correct, but close enough */
-               mkdir(fname, 0700);
+               if (!options.stat_check || stat(fname, &st) == -1) {
+                       mkdir(fname, 0700);
+               }
        }
 
        if (create_options & FILE_DIRECTORY_FILE) flags = O_RDONLY|O_DIRECTORY;
@@ -325,6 +327,12 @@ void nb_writex(struct child_struct *child, int handle, int offset,
        struct ftable *ftable = (struct ftable *)child->private;
        ssize_t ret;
 
+       if (options.fake_io) {
+               child->bytes += ret_size;
+               child->bytes_since_fsync += ret_size;
+               return;
+       }
+
        (void)status;
 
        buf = calloc(size, 1);
@@ -374,6 +382,11 @@ void nb_readx(struct child_struct *child, int handle, int offset,
        void *buf;
        struct ftable *ftable = (struct ftable *)child->private;
 
+       if (options.fake_io) {
+               child->bytes += ret_size;
+               return;
+       }
+
        (void)status;
 
        buf = malloc(size);