fio: document locking for overlap checking in offload mode
Overlap checking in offload submission mode uses locks in an unusual
manner. Add some comments in the code to clarify how locks are used.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/backend.c b/backend.c
index 1c60138..d6450ba 100644
--- a/backend.c
+++ b/backend.c
@@ -1874,6 +1874,11 @@
"perhaps try --debug=io option for details?\n",
td->o.name, td->io_ops->name);
+ /*
+ * Acquire this lock if we were doing overlap checking in
+ * offload mode so that we don't clean up this job while
+ * another thread is checking its io_u's for overlap
+ */
if (td_offload_overlap(td))
pthread_mutex_lock(&overlap_check);
td_set_runstate(td, TD_FINISHING);
diff --git a/ioengines.c b/ioengines.c
index 56723ad..b7df860 100644
--- a/ioengines.c
+++ b/ioengines.c
@@ -288,6 +288,13 @@
assert((io_u->flags & IO_U_F_FLIGHT) == 0);
io_u_set(td, io_u, IO_U_F_FLIGHT);
+
+ /*
+ * If overlap checking was enabled in offload mode we
+ * can release this lock that was acquired when we
+ * started the overlap check because the IO_U_F_FLIGHT
+ * flag is now set
+ */
if (td_offload_overlap(td))
pthread_mutex_unlock(&overlap_check);
diff --git a/rate-submit.c b/rate-submit.c
index 68ad755..e5c6204 100644
--- a/rate-submit.c
+++ b/rate-submit.c
@@ -21,6 +21,14 @@
* time to prevent two threads from thinking the coast
* is clear and then submitting IOs that overlap with
* each other
+ *
+ * If an overlap is found, release the lock and
+ * re-acquire it before checking again to give other
+ * threads a chance to make progress
+ *
+ * If an overlap is not found, release the lock when the
+ * io_u's IO_U_F_FLIGHT flag is set so that this io_u
+ * can be checked by other threads as they assess overlap
*/
pthread_mutex_lock(&overlap_check);
for_each_td(td, i) {