From ca0122d822ea7dd573f05ca4cf43c5d0ff9f4adb Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Sun, 23 Oct 2016 08:35:14 -0600 Subject: [PATCH] backend: if we can't grab stat_mutex, report a deadlock error and exit Signed-off-by: Theodore Ts'o Signed-off-by: Jens Axboe --- backend.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/backend.c b/backend.c index fb2a8551..093b6a3a 100644 --- a/backend.c +++ b/backend.c @@ -1471,6 +1471,7 @@ static void *thread_main(void *data) struct thread_data *td = fd->td; struct thread_options *o = &td->o; struct sk_out *sk_out = fd->sk_out; + int deadlock_loop_cnt; int clear_state; int ret; @@ -1731,11 +1732,17 @@ static void *thread_main(void *data) * the rusage_sem, which would never get upped because * this thread is waiting for the stat mutex. */ + deadlock_loop_cnt = 0; do { check_update_rusage(td); if (!fio_mutex_down_trylock(stat_mutex)) break; usleep(1000); + if (deadlock_loop_cnt++ > 5000) { + log_err("fio seems to be stuck grabbing stat_mutex, forcibly exiting\n"); + td->error = EDEADLOCK; + goto err; + } } while (1); if (td_read(td) && td->io_bytes[DDIR_READ]) -- 2.25.1