projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gettime: calibration rounding error
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index 3b42c4df4dd285678cb09433fa7b4d26c7fb2511..a71d768d22d89437e4a6cde828c24c36bb28ecbf 100644
(file)
--- a/
backend.c
+++ b/
backend.c
@@
-34,7
+34,9
@@
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/ipc.h>
+#ifndef FIO_NO_HAVE_SHM_H
#include <sys/shm.h>
#include <sys/shm.h>
+#endif
#include <sys/mman.h>
#include "fio.h"
#include <sys/mman.h>
#include "fio.h"
@@
-62,6
+64,7
@@
struct io_log *agg_io_log[DDIR_RWDIR_CNT];
int groupid = 0;
unsigned int thread_number = 0;
int groupid = 0;
unsigned int thread_number = 0;
+unsigned int stat_number = 0;
unsigned int nr_process = 0;
unsigned int nr_thread = 0;
int shm_id = 0;
unsigned int nr_process = 0;
unsigned int nr_thread = 0;
int shm_id = 0;
@@
-591,7
+594,7
@@
static void do_io(struct thread_data *td)
int ret2, full;
enum fio_ddir ddir;
int ret2, full;
enum fio_ddir ddir;
- if (td->terminate)
+ if (td->terminate
|| td->done
)
break;
update_tv_cache(td);
break;
update_tv_cache(td);
@@
-726,7
+729,7
@@
sync_done:
if (ret < 0)
break;
if (ret < 0)
break;
- if (!ddir_rw_sum(bytes_done))
+ if (!ddir_rw_sum(bytes_done)
&& !(td->io_ops->flags & FIO_NOIO)
)
continue;
if (!in_ramp_time(td) && should_check_rate(td, bytes_done)) {
continue;
if (!in_ramp_time(td) && should_check_rate(td, bytes_done)) {
@@
-800,6
+803,10
@@
static void cleanup_io_u(struct thread_data *td)
io_u = flist_entry(entry, struct io_u, list);
flist_del(&io_u->list);
io_u = flist_entry(entry, struct io_u, list);
flist_del(&io_u->list);
+
+ if (td->io_ops->io_u_free)
+ td->io_ops->io_u_free(td, io_u);
+
fio_memfree(io_u, sizeof(*io_u));
}
fio_memfree(io_u, sizeof(*io_u));
}
@@
-882,6
+889,16
@@
static int init_io_u(struct thread_data *td)
io_u->index = i;
io_u->flags = IO_U_F_FREE;
flist_add(&io_u->list, &td->io_u_freelist);
io_u->index = i;
io_u->flags = IO_U_F_FREE;
flist_add(&io_u->list, &td->io_u_freelist);
+
+ if (td->io_ops->io_u_init) {
+ int ret = td->io_ops->io_u_init(td, io_u);
+
+ if (ret) {
+ log_err("fio: failed to init engine data: %d\n", ret);
+ return 1;
+ }
+ }
+
p += max_bs;
}
p += max_bs;
}
@@
-1270,8
+1287,8
@@
err:
verify_async_exit(td);
close_and_free_files(td);
verify_async_exit(td);
close_and_free_files(td);
- close_ioengine(td);
cleanup_io_u(td);
cleanup_io_u(td);
+ close_ioengine(td);
cgroup_shutdown(td, &cgroup_mnt);
if (td->o.cpumask_set) {
cgroup_shutdown(td, &cgroup_mnt);
if (td->o.cpumask_set) {
@@
-1382,7
+1399,7
@@
static void reap_threads(unsigned int *nr_running, unsigned int *t_rate,
if (WIFSIGNALED(status)) {
int sig = WTERMSIG(status);
if (WIFSIGNALED(status)) {
int sig = WTERMSIG(status);
- if (sig != SIGTERM)
+ if (sig != SIGTERM
&& sig != SIGUSR2
)
log_err("fio: pid=%d, got signal=%d\n",
(int) td->pid, sig);
td->sig = sig;
log_err("fio: pid=%d, got signal=%d\n",
(int) td->pid, sig);
td->sig = sig;