projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
backend: don't dereference ->io_ops in reap_threads()
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index 6198c3d9f8c7d445713c6a70fcd91b0f1ff03807..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;
@@
-1505,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);
@@
-1726,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;
@@
-1765,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
@@
-1804,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);
@@
-1830,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, "
@@
-1925,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++;
@@
-2342,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");