projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix more overflows in percentile calculation for Windows
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index d2675b43cfd3b9900636ecb76ea8c96f82817352..d98e5fe4e8f8040b41a14a153ed40085756c7181 100644
(file)
--- a/
backend.c
+++ b/
backend.c
@@
-499,7
+499,6
@@
int io_queue_event(struct thread_data *td, struct io_u *io_u, int *ret,
if (ddir_rw(io_u->ddir))
td->ts.short_io_u[io_u->ddir]++;
if (ddir_rw(io_u->ddir))
td->ts.short_io_u[io_u->ddir]++;
- f = io_u->file;
if (io_u->offset == f->real_file_size)
goto sync_done;
if (io_u->offset == f->real_file_size)
goto sync_done;
@@
-1391,6
+1390,8
@@
static bool keep_running(struct thread_data *td)
if (td->done)
return false;
if (td->done)
return false;
+ if (td->terminate)
+ return false;
if (td->o.time_based)
return true;
if (td->o.loops) {
if (td->o.time_based)
return true;
if (td->o.loops) {
@@
-1503,7
+1504,7
@@
static void *thread_main(void *data)
struct sk_out *sk_out = fd->sk_out;
uint64_t bytes_done[DDIR_RWDIR_CNT];
int deadlock_loop_cnt;
struct sk_out *sk_out = fd->sk_out;
uint64_t bytes_done[DDIR_RWDIR_CNT];
int deadlock_loop_cnt;
-
int clear_state
;
+
bool clear_state, did_some_io
;
int ret;
sk_out_assign(sk_out);
int ret;
sk_out_assign(sk_out);
@@
-1724,7
+1725,8
@@
static void *thread_main(void *data)
}
memset(bytes_done, 0, sizeof(bytes_done));
}
memset(bytes_done, 0, sizeof(bytes_done));
- clear_state = 0;
+ clear_state = false;
+ did_some_io = false;
while (keep_running(td)) {
uint64_t verify_bytes;
while (keep_running(td)) {
uint64_t verify_bytes;
@@
-1763,7
+1765,7
@@
static void *thread_main(void *data)
if (td->runstate >= TD_EXITED)
break;
if (td->runstate >= TD_EXITED)
break;
- clear_state =
1
;
+ clear_state =
true
;
/*
* Make sure we've successfully updated the rusage stats
/*
* Make sure we've successfully updated the rusage stats
@@
-1802,6
+1804,9
@@
static void *thread_main(void *data)
td_ioengine_flagged(td, FIO_UNIDIR))
continue;
td_ioengine_flagged(td, FIO_UNIDIR))
continue;
+ if (ddir_rw_sum(bytes_done))
+ did_some_io = true;
+
clear_io_state(td, 0);
fio_gettime(&td->start, NULL);
clear_io_state(td, 0);
fio_gettime(&td->start, NULL);
@@
-1828,6
+1833,7
@@
static void *thread_main(void *data)
* (Are we not missing other flags that can be ignored ?)
*/
if ((td->o.size || td->o.io_size) && !ddir_rw_sum(bytes_done) &&
* (Are we not missing other flags that can be ignored ?)
*/
if ((td->o.size || td->o.io_size) && !ddir_rw_sum(bytes_done) &&
+ !did_some_io && !td->o.create_only &&
!(td_ioengine_flagged(td, FIO_NOIO) ||
td_ioengine_flagged(td, FIO_DISKLESSIO)))
log_err("%s: No I/O performed by %s, "
!(td_ioengine_flagged(td, FIO_NOIO) ||
td_ioengine_flagged(td, FIO_DISKLESSIO)))
log_err("%s: No I/O performed by %s, "
@@
-1923,11
+1929,7
@@
static void reap_threads(unsigned int *nr_running, uint64_t *t_rate,
for_each_td(td, i) {
int flags = 0;
for_each_td(td, i) {
int flags = 0;
- /*
- * ->io_ops is NULL for a thread that has closed its
- * io engine
- */
- if (td->io_ops && !strcmp(td->io_ops->name, "cpuio"))
+ if (!strcmp(td->o.ioengine, "cpuio"))
cputhreads++;
else
realthreads++;
cputhreads++;
else
realthreads++;
@@
-2042,7
+2044,10
@@
static bool __check_trigger_file(void)
static bool trigger_timedout(void)
{
if (trigger_timeout)
static bool trigger_timedout(void)
{
if (trigger_timeout)
- return time_since_genesis() >= trigger_timeout;
+ if (time_since_genesis() >= trigger_timeout) {
+ trigger_timeout = 0;
+ return true;
+ }
return false;
}
return false;
}
@@
-2051,7
+2056,7
@@
void exec_trigger(const char *cmd)
{
int ret;
{
int ret;
- if (!cmd)
+ if (!cmd
|| cmd[0] == '\0'
)
return;
ret = system(cmd);
return;
ret = system(cmd);
@@
-2337,6
+2342,7
@@
reap:
fio_terminate_threads(TERMINATE_ALL);
fio_abort = 1;
nr_started--;
fio_terminate_threads(TERMINATE_ALL);
fio_abort = 1;
nr_started--;
+ free(fd);
break;
}
dprint(FD_MUTEX, "done waiting on startup_mutex\n");
break;
}
dprint(FD_MUTEX, "done waiting on startup_mutex\n");