Skip to contentSkip to conversation

Recent changes (master)

PATCH Jens Axboe 1 participant 1 message Oct 25, 2016

lore
Share & tools
lore

Jens Axboe

author
#0 lore raw

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
index 093b6a3..ed4f1f0 100644
@@ -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
index 080842a..74c1b30 100644
@@ -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
index 7580922..e5b045e 100644
@@ -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)