Move td_* ddir defines
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 4a02f2ebee198584e477f5e6b8749447c6f94463..6ac8ef057b57ed9f98f35f8dfef5ace8a1af196e 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -37,6 +37,8 @@
 #include "fio.h"
 #include "hash.h"
 #include "smalloc.h"
+#include "verify.h"
+#include "diskutil.h"
 
 unsigned long page_mask;
 unsigned long page_size;
@@ -383,7 +385,7 @@ static void do_verify(struct thread_data *td)
         * read from disk.
         */
        for_each_file(td, f, i) {
-               if (!(f->flags & FIO_FILE_OPEN))
+               if (!fio_file_open(f))
                        continue;
                if (fio_io_sync(td, f))
                        break;
@@ -700,7 +702,7 @@ sync_done:
                        td_set_runstate(td, TD_FSYNCING);
 
                        for_each_file(td, f, i) {
-                               if (!(f->flags & FIO_FILE_OPEN))
+                               if (!fio_file_open(f))
                                        continue;
                                fio_io_sync(td, f);
                        }
@@ -878,7 +880,6 @@ static void reset_io_counters(struct thread_data *td)
        td->zone_bytes = 0;
        td->rate_bytes = 0;
        td->rate_blocks = 0;
-       td->rw_end_set[0] = td->rw_end_set[1] = 0;
 
        td->last_was_sync = 0;
 
@@ -922,7 +923,23 @@ static void clear_io_state(struct thread_data *td)
 
        close_files(td);
        for_each_file(td, f, i)
-               f->flags &= ~FIO_FILE_DONE;
+               fio_file_clear_done(f);
+}
+
+static int exec_string(const char *string)
+{
+       int ret, newlen = strlen(string) + 1 + 8;
+       char *str;
+
+       str = malloc(newlen);
+       sprintf(str, "sh -c %s", string);
+
+       ret = system(str);
+       if (ret == -1)
+               log_err("fio: exec of cmd <%s> failed\n", str);
+
+       free(str);
+       return ret;
 }
 
 /*
@@ -1014,7 +1031,12 @@ static void *thread_main(void *data)
                goto err;
 
        if (td->o.exec_prerun) {
-               if (system(td->o.exec_prerun) < 0)
+               if (exec_string(td->o.exec_prerun))
+                       goto err;
+       }
+
+       if (td->o.pre_read) {
+               if (pre_read_files(td) < 0)
                        goto err;
        }
 
@@ -1042,21 +1064,11 @@ static void *thread_main(void *data)
                clear_state = 1;
 
                if (td_read(td) && td->io_bytes[DDIR_READ]) {
-                       if (td->rw_end_set[DDIR_READ])
-                               elapsed = utime_since(&td->start,
-                                                     &td->rw_end[DDIR_READ]);
-                       else
-                               elapsed = utime_since_now(&td->start);
-
+                       elapsed = utime_since_now(&td->start);
                        runtime[DDIR_READ] += elapsed;
                }
                if (td_write(td) && td->io_bytes[DDIR_WRITE]) {
-                       if (td->rw_end_set[DDIR_WRITE])
-                               elapsed = utime_since(&td->start,
-                                                     &td->rw_end[DDIR_WRITE]);
-                       else
-                               elapsed = utime_since_now(&td->start);
-
+                       elapsed = utime_since_now(&td->start);
                        runtime[DDIR_WRITE] += elapsed;
                }
 
@@ -1110,10 +1122,8 @@ static void *thread_main(void *data)
                        finish_log(td, td->ts.clat_log, "clat");
        }
        fio_mutex_up(writeout_mutex);
-       if (td->o.exec_postrun) {
-               if (system(td->o.exec_postrun) < 0)
-                       log_err("fio: postrun %s failed\n", td->o.exec_postrun);
-       }
+       if (td->o.exec_postrun)
+               exec_string(td->o.exec_postrun);
 
        if (exitall_on_terminate)
                terminate_threads(td->groupid);