Merge branch 'lintian-manpage-fixes' of https://github.com/hoexter/fio
[fio.git] / steadystate.c
index ee1c0e5b637d0512302ea96fb4e7f9263a4c5799..ad19318c2a23f50cda50f6aef7927e4f0adde022 100644 (file)
@@ -196,7 +196,7 @@ static bool steadystate_deviation(uint64_t iops, uint64_t bw,
        return false;
 }
 
-void steadystate_check(void)
+int steadystate_check(void)
 {
        int i, j, ddir, prev_groupid, group_ramp_time_over = 0;
        unsigned long rate_time;
@@ -208,6 +208,7 @@ void steadystate_check(void)
 
        prev_groupid = -1;
        for_each_td(td, i) {
+               const bool needs_lock = td_async_processing(td);
                struct steadystate_data *ss = &td->ss;
 
                if (!ss->dur || td->runstate <= TD_SETTING_UP ||
@@ -235,23 +236,20 @@ void steadystate_check(void)
                                ss->state |= FIO_SS_RAMP_OVER;
                }
 
-               td_io_u_lock(td);
+               if (needs_lock)
+                       __td_io_u_lock(td);
+
                for (ddir = 0; ddir < DDIR_RWDIR_CNT; ddir++) {
                        td_iops += td->io_blocks[ddir];
                        td_bytes += td->io_bytes[ddir];
                }
-               td_io_u_unlock(td);
+
+               if (needs_lock)
+                       __td_io_u_unlock(td);
 
                rate_time = mtime_since(&ss->prev_time, &now);
                memcpy(&ss->prev_time, &now, sizeof(now));
 
-               /*
-                * Begin monitoring when job starts but don't actually use
-                * data in checking stopping criterion until ss->ramp_time is
-                * over. This ensures that we will have a sane value in
-                * prev_iops/bw the first time through after ss->ramp_time
-                * is done.
-                */
                if (ss->state & FIO_SS_RAMP_OVER) {
                        group_bw += 1000 * (td_bytes - ss->prev_bytes) / rate_time;
                        group_iops += 1000 * (td_iops - ss->prev_iops) / rate_time;
@@ -297,6 +295,7 @@ void steadystate_check(void)
                        }
                }
        }
+       return 0;
 }
 
 int td_steadystate_init(struct thread_data *td)