projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into gfio
[fio.git]
/
backend.c
diff --git
a/backend.c
b/backend.c
index 38efc2307809266d234cfeb183e33bda94b5ea68..dcc6fba06fdb58636555cdd1db13d5113cab9b21 100644
(file)
--- a/
backend.c
+++ b/
backend.c
@@
-50,6
+50,7
@@
#include "server.h"
static pthread_t disk_util_thread;
#include "server.h"
static pthread_t disk_util_thread;
+static struct fio_mutex *disk_thread_mutex;
static struct fio_mutex *startup_mutex;
static struct fio_mutex *writeout_mutex;
static struct flist_head *cgroup_list;
static struct fio_mutex *startup_mutex;
static struct fio_mutex *writeout_mutex;
static struct flist_head *cgroup_list;
@@
-1599,20
+1600,28
@@
static void run_threads(void)
update_io_ticks();
}
update_io_ticks();
}
+void wait_for_disk_thread_exit(void)
+{
+ fio_mutex_down(disk_thread_mutex);
+}
+
static void *disk_thread_main(void *data)
{
static void *disk_thread_main(void *data)
{
+ int ret = 0;
+
fio_mutex_up(startup_mutex);
fio_mutex_up(startup_mutex);
- while (threads) {
+ while (threads
&& !ret
) {
usleep(DISK_UTIL_MSEC * 1000);
if (!threads)
break;
usleep(DISK_UTIL_MSEC * 1000);
if (!threads)
break;
- update_io_ticks();
+
ret =
update_io_ticks();
if (!is_backend)
print_thread_status();
}
if (!is_backend)
print_thread_status();
}
+ fio_mutex_up(disk_thread_mutex);
return NULL;
}
return NULL;
}
@@
-1620,14
+1629,20
@@
static int create_disk_util_thread(void)
{
int ret;
{
int ret;
+ setup_disk_util();
+
+ disk_thread_mutex = fio_mutex_init(0);
+
ret = pthread_create(&disk_util_thread, NULL, disk_thread_main, NULL);
if (ret) {
ret = pthread_create(&disk_util_thread, NULL, disk_thread_main, NULL);
if (ret) {
+ fio_mutex_remove(disk_thread_mutex);
log_err("Can't create disk util thread: %s\n", strerror(ret));
return 1;
}
ret = pthread_detach(disk_util_thread);
if (ret) {
log_err("Can't create disk util thread: %s\n", strerror(ret));
return 1;
}
ret = pthread_detach(disk_util_thread);
if (ret) {
+ fio_mutex_remove(disk_thread_mutex);
log_err("Can't detatch disk util thread: %s\n", strerror(ret));
return 1;
}
log_err("Can't detatch disk util thread: %s\n", strerror(ret));
return 1;
}
@@
-1691,5
+1706,6
@@
int fio_backend(void)
fio_mutex_remove(startup_mutex);
fio_mutex_remove(writeout_mutex);
fio_mutex_remove(startup_mutex);
fio_mutex_remove(writeout_mutex);
+ fio_mutex_remove(disk_thread_mutex);
return exit_value;
}
return exit_value;
}