X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=backend.c;fp=backend.c;h=dcc6fba06fdb58636555cdd1db13d5113cab9b21;hp=38efc2307809266d234cfeb183e33bda94b5ea68;hb=80666bece308842c36132245e4cbbe9eb0bc506b;hpb=c41a9d06a1957ba7c5a019e3d6088a5e8e8e0a47;ds=sidebyside diff --git a/backend.c b/backend.c index 38efc230..dcc6fba0 100644 --- a/backend.c +++ b/backend.c @@ -50,6 +50,7 @@ #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; @@ -1599,20 +1600,28 @@ static void run_threads(void) update_io_ticks(); } +void wait_for_disk_thread_exit(void) +{ + fio_mutex_down(disk_thread_mutex); +} + static void *disk_thread_main(void *data) { + int ret = 0; + fio_mutex_up(startup_mutex); - while (threads) { + while (threads && !ret) { usleep(DISK_UTIL_MSEC * 1000); if (!threads) break; - update_io_ticks(); + ret = update_io_ticks(); if (!is_backend) print_thread_status(); } + fio_mutex_up(disk_thread_mutex); return NULL; } @@ -1620,14 +1629,20 @@ static int create_disk_util_thread(void) { 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) { + 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) { + fio_mutex_remove(disk_thread_mutex); 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(disk_thread_mutex); return exit_value; }