projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
axmap: clear map->first_free when we reset it
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index b80c9038fee4155a1728bdd8559b7ed8f1735dcf..7cebf4d30cbeabe7b32adca54fd0561a29f3a634 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"
@@
-420,6
+422,7
@@
static void do_verify(struct thread_data *td)
io_u = NULL;
while (!td->terminate) {
io_u = NULL;
while (!td->terminate) {
+ enum fio_ddir ddir;
int ret2, full;
update_tv_cache(td);
int ret2, full;
update_tv_cache(td);
@@
-454,6
+457,8
@@
static void do_verify(struct thread_data *td)
else
io_u->end_io = verify_io_u;
else
io_u->end_io = verify_io_u;
+ ddir = io_u->ddir;
+
ret = td_io_queue(td, io_u);
switch (ret) {
case FIO_Q_COMPLETED:
ret = td_io_queue(td, io_u);
switch (ret) {
case FIO_Q_COMPLETED:
@@
-505,7
+510,7
@@
sync_done:
break;
}
break;
}
- if (break_on_this_error(td,
io_u->
ddir, &ret))
+ if (break_on_this_error(td, ddir, &ret))
break;
/*
break;
/*
@@
-801,6
+806,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));
}
@@
-883,6
+892,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;
}
@@
-995,6
+1014,8
@@
static void *thread_main(void *data)
} else
td->pid = gettid();
} else
td->pid = gettid();
+ fio_local_clock_init(td->o.use_thread);
+
dprint(FD_PROCESS, "jobs pid=%d started\n", (int) td->pid);
INIT_FLIST_HEAD(&td->io_u_freelist);
dprint(FD_PROCESS, "jobs pid=%d started\n", (int) td->pid);
INIT_FLIST_HEAD(&td->io_u_freelist);
@@
-1004,6
+1025,7
@@
static void *thread_main(void *data)
INIT_FLIST_HEAD(&td->io_hist_list);
INIT_FLIST_HEAD(&td->verify_list);
INIT_FLIST_HEAD(&td->trim_list);
INIT_FLIST_HEAD(&td->io_hist_list);
INIT_FLIST_HEAD(&td->verify_list);
INIT_FLIST_HEAD(&td->trim_list);
+ INIT_FLIST_HEAD(&td->next_rand_list);
pthread_mutex_init(&td->io_u_lock, NULL);
td->io_hist_tree = RB_ROOT;
pthread_mutex_init(&td->io_u_lock, NULL);
td->io_hist_tree = RB_ROOT;
@@
-1053,7
+1075,7
@@
static void *thread_main(void *data)
goto err;
}
goto err;
}
-#ifdef
FIO_HAVE
_LIBNUMA
+#ifdef
CONFIG
_LIBNUMA
/* numa node setup */
if (td->o.numa_cpumask_set || td->o.numa_memmask_set) {
int ret;
/* numa node setup */
if (td->o.numa_cpumask_set || td->o.numa_memmask_set) {
int ret;
@@
-1271,8
+1293,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) {
@@
-1383,7
+1405,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;