Remove holes in verify_header structure
[fio.git] / backend.c
index 821e978a98b0152b2e4c099c5af6eb6d8e0b1abc..52791040ff21384d283b2a09de3ff9718e19d866 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -30,6 +30,7 @@
 #include <locale.h>
 #include <assert.h>
 #include <time.h>
+#include <inttypes.h>
 #include <sys/stat.h>
 #include <sys/wait.h>
 #include <sys/ipc.h>
@@ -58,8 +59,16 @@ static volatile int fio_abort;
 
 struct io_log *agg_io_log[2];
 
+int groupid = 0;
+unsigned int thread_number = 0;
+unsigned int nr_process = 0;
+unsigned int nr_thread = 0;
+int shm_id = 0;
+int temp_stall_ts;
+unsigned long done_secs = 0;
+
 #define PAGE_ALIGN(buf)        \
-       (char *) (((unsigned long) (buf) + page_mask) & ~page_mask)
+       (char *) (((uintptr_t) (buf) + page_mask) & ~page_mask)
 
 #define JOB_START_TIMEOUT      (5 * 1000)
 
@@ -285,6 +294,7 @@ requeue:
 
        return 0;
 }
+
 static inline void __update_tv_cache(struct thread_data *td)
 {
        fio_gettime(&td->tv_cache, NULL);
@@ -354,8 +364,6 @@ static int break_on_this_error(struct thread_data *td, enum fio_ddir ddir,
        return 0;
 }
 
-
-
 /*
  * The main verify engine. Runs over the writes we previously submitted,
  * reads the blocks back in, and checks the crc/md5 of the data.
@@ -401,6 +409,9 @@ static void do_verify(struct thread_data *td)
                        }
                }
 
+               if (flow_threshold_exceeded(td))
+                       continue;
+
                io_u = __get_io_u(td);
                if (!io_u)
                        break;
@@ -552,6 +563,9 @@ static void do_io(struct thread_data *td)
                        }
                }
 
+               if (flow_threshold_exceeded(td))
+                       continue;
+
                io_u = get_io_u(td);
                if (!io_u)
                        break;
@@ -1012,7 +1026,8 @@ static void *thread_main(void *data)
        if (td->o.cgroup_weight && cgroup_setup(td, cgroup_list, &cgroup_mnt))
                goto err;
 
-       if (nice(td->o.nice) == -1) {
+       errno = 0;
+       if (nice(td->o.nice) == -1 && errno != 0) {
                td_verror(td, errno, "nice");
                goto err;
        }
@@ -1171,7 +1186,7 @@ err:
                write_iolog_close(td);
 
        td_set_runstate(td, TD_EXITED);
-       return (void *) (unsigned long) td->error;
+       return (void *) (uintptr_t) td->error;
 }
 
 
@@ -1202,7 +1217,7 @@ static int fork_main(int shmid, int offset)
        td = data + offset * sizeof(struct thread_data);
        ret = thread_main(td);
        shmdt(data);
-       return (int) (unsigned long) ret;
+       return (int) (uintptr_t) ret;
 }
 
 /*
@@ -1302,8 +1317,6 @@ reaped:
                fio_terminate_threads(TERMINATE_ALL);
 }
 
-
-
 /*
  * Main function for kicking off and reaping jobs, as needed.
  */
@@ -1488,7 +1501,8 @@ static void run_threads(void)
                }
 
                if (left) {
-                       log_err("fio: %d jobs failed to start\n", left);
+                       log_err("fio: %d job%s failed to start\n", left,
+                                       left > 1 ? "s" : "");
                        for (i = 0; i < this_jobs; i++) {
                                td = map[i];
                                if (!td)
@@ -1579,7 +1593,6 @@ static int create_disk_util_thread(void)
        return 0;
 }
 
-
 int fio_backend(void)
 {
        struct thread_data *td;
@@ -1634,5 +1647,3 @@ int fio_backend(void)
        fio_mutex_remove(writeout_mutex);
        return exit_value;
 }
-
-