Recent changes (master)
The following changes since commit ca0122d822ea7dd573f05ca4cf43c5d0ff9f4adb:
backend: if we can't grab stat_mutex, report a deadlock error and exit (2016-10-23 08:35:14 -0600)
are available in the git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to 43f248c4527a49d3de0cd758ce669f7736028ea4:
Use the POSIX EDEADLK instead of the Linux EDEADLOCK (2016-10-24 20:48:43 -0600)
----------------------------------------------------------------
Bruce Cran (1):
Use the POSIX EDEADLK instead of the Linux EDEADLOCK
Jens Axboe (3):
mutex: clear mutex when removed
fio: make job reap timeout 5 minutes
backend: end IO loop early, if the job is marked as terminated
backend.c | 10 +++++++++- fio.h | 2 +- mutex.c | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-)
---
Diff of recent changes:
backend.c +9 -1
@@ -1723,6 +1723,14 @@ static void *thread_main(void *data) } } +/* +* If we took too long to shut down, the main thread could +* already consider us reaped/exited. If that happens, break +* out and clean up. +*/ +if (td->runstate >=TD_EXITED ) +break ; + clear_state =1 ;/*
@@ -1740,7 +1748,7 @@ static void *thread_main(void *data)usleep (1000 );if (deadlock_loop_cnt++ >5000 ) {log_err ("fio seems to be stuck grabbing stat_mutex, forcibly exiting\n" ); - td->error =EDEADLOCK ; + td->error =EDEADLK ; goto err; } }while (1 );
fio.h +1 -1
@@ -588,7 +588,7 @@ extern const char *runstate_to_name(int runstate);* Allow 60 seconds for a job to quit on its own, otherwise reap with * a vengeance. */ -#define FIO_REAP_TIMEOUT 60 +#define FIO_REAP_TIMEOUT 300#define TERMINATE_ALL (-1U)extern void fio_terminate_threads (unsigned int );
mutex.c +6 -0
@@ -22,6 +22,12 @@ void __fio_mutex_remove(struct fio_mutex *mutex) {assert (mutex->magic ==FIO_MUTEX_MAGIC );pthread_cond_destroy (&mutex->cond); + +/* +* Ensure any subsequent attempt to grab this mutex will fail +* with an assert, instead of just silently hanging. +*/ +memset (mutex,0 ,sizeof (*mutex)); }void fio_mutex_remove (struct fio_mutex *mutex)