Move setup_rate() out of log.c
[fio.git] / time.c
diff --git a/time.c b/time.c
index 45a415cbb43424bf54266f3913b287e5515efd39..80f8ca499f159f9e9473219c74480b89e6394652 100644 (file)
--- a/time.c
+++ b/time.c
@@ -114,7 +114,7 @@ void rate_throttle(struct thread_data *td, unsigned long time_spent,
        unsigned long usec_cycle;
        unsigned int bs;
 
-       if (!td->rate)
+       if (!td->rate && !td->rate_iops)
                return;
 
        if (td_rw(td))
@@ -130,9 +130,13 @@ void rate_throttle(struct thread_data *td, unsigned long time_spent,
                unsigned long s = usec_cycle - time_spent;
 
                td->rate_pending_usleep += s;
+
                if (td->rate_pending_usleep >= 100000) {
+                       struct timeval t;
+
+                       fio_gettime(&t, NULL);
                        usec_sleep(td, td->rate_pending_usleep);
-                       td->rate_pending_usleep = 0;
+                       td->rate_pending_usleep -= utime_since_now(&t);
                }
        } else {
                long overtime = time_spent - usec_cycle;