The following changes since commit b24f59ab5ac96a67a016dc921687b0feae9bbf94:

  Detect Windows operating system in ./configure (2014-03-06 14:31:57 -0700)

are available in the git repository at:

  git://git.kernel.dk/fio.git master

for you to fetch changes up to 3939fe853fd146378811a05b78731d7f20d0152f:

  Add exceeds_number_ios() helper (2014-03-11 20:16:38 -0600)

----------------------------------------------------------------
Jens Axboe (2):
      Try a little harder to honor number_ios more accurately
      Add exceeds_number_ios() helper

Sébastien Bouchex Bellomié (1):
      Fix pointer alignment bug causing SIGBUS on Sparc64

 backend.c        |   17 ++++++++++++++++-
 io_u.c           |    3 ---
 os/os.h          |   18 ++++++------------
 thread_options.h |    2 +-
 4 files changed, 23 insertions(+), 17 deletions(-)

---

Diff of recent changes:

diff --git a/backend.c b/backend.c
index 992033c..1ff8b3f 100644
--- a/backend.c
+++ b/backend.c
@@ -623,6 +623,19 @@ reap:
        dprint(FD_VERIFY, "exiting loop\n");
 }
 
+static unsigned int exceeds_number_ios(struct thread_data *td)
+{
+       unsigned long long number_ios;
+
+       if (!td->o.number_ios)
+               return 0;
+
+       number_ios = ddir_rw_sum(td->this_io_blocks);
+       number_ios += td->io_u_queued + td->io_u_in_flight;
+
+       return number_ios >= td->o.number_ios;
+}
+
 static int io_bytes_exceeded(struct thread_data *td)
 {
        unsigned long long bytes;
@@ -636,7 +649,7 @@ static int io_bytes_exceeded(struct thread_data *td)
        else
                bytes = td->this_io_bytes[DDIR_TRIM];
 
-       return bytes >= td->o.size;
+       return bytes >= td->o.size || exceeds_number_ios(td);
 }
 
 /*
@@ -1127,6 +1140,8 @@ static int keep_running(struct thread_data *td)
                td->o.loops--;
                return 1;
        }
+       if (exceeds_number_ios(td))
+               return 0;
 
        if (td->o.size != -1ULL && ddir_rw_sum(td->io_bytes) < td->o.size) {
                uint64_t diff;
diff --git a/io_u.c b/io_u.c
index 8e27708..0b86d9f 100644
--- a/io_u.c
+++ b/io_u.c
@@ -1595,9 +1595,6 @@ static void account_io_completion(struct thread_data *td, 
struct io_u *io_u,
 
        if (!gtod_reduce(td))
                add_iops_sample(td, idx, bytes, &icd->time);
-
-       if (td->o.number_ios && !--td->o.number_ios)
-               td->done = 1;
 }
 
 static long long usec_for_io(struct thread_data *td, enum fio_ddir ddir)
diff --git a/os/os.h b/os/os.h
index 7f92d1b..2f2d069 100644
--- a/os/os.h
+++ b/os/os.h
@@ -201,28 +201,22 @@ static inline uint64_t fio_swap64(uint64_t val)
 #endif /* FIO_HAVE_BYTEORDER_FUNCS */
 
 #define le16_to_cpu(val) ({                    \
-       uint16_t *__val = &(val);               \
-       __le16_to_cpu(*__val);                  \
+       __le16_to_cpu(val);                     \
 })
 #define le32_to_cpu(val) ({                    \
-       uint32_t *__val = &(val);               \
-       __le32_to_cpu(*__val);                  \
+       __le32_to_cpu(val);                     \
 })
 #define le64_to_cpu(val) ({                    \
-       uint64_t *__val = &(val);               \
-       __le64_to_cpu(*__val);                  \
+       __le64_to_cpu(val);                             \
 })
 #define cpu_to_le16(val) ({                    \
-       uint16_t *__val = &(val);               \
-       __cpu_to_le16(*__val);                  \
+       __cpu_to_le16(val);                     \
 })
 #define cpu_to_le32(val) ({                    \
-       uint32_t *__val = &(val);               \
-       __cpu_to_le32(*__val);                  \
+       __cpu_to_le32(val);                     \
 })
 #define cpu_to_le64(val) ({                    \
-       uint64_t *__val = &(val);               \
-       __cpu_to_le64(*__val);                  \
+       __cpu_to_le64(val);                     \
 })
 
 #ifndef FIO_HAVE_BLKTRACE
diff --git a/thread_options.h b/thread_options.h
index 4ea6ebd..bacd86b 100644
--- a/thread_options.h
+++ b/thread_options.h
@@ -45,7 +45,7 @@ struct thread_options {
        unsigned int kb_base;
        unsigned int unit_base;
        unsigned int ddir_seq_nr;
-       long ddir_seq_add;
+       long long ddir_seq_add;
        unsigned int iodepth;
        unsigned int iodepth_low;
        unsigned int iodepth_batch;
--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to