Improve async verify offload efficiency
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/verify.c b/verify.c
index 5dd9ee3..978e77b 100644
--- a/verify.c
+++ b/verify.c
@@ -756,6 +756,8 @@
}
do {
+ FLIST_HEAD(list);
+
read_barrier();
if (td->verify_thread_exit)
break;
@@ -771,17 +773,19 @@
}
}
- if (flist_empty(&td->verify_list)) {
- pthread_mutex_unlock(&td->io_u_lock);
- continue;
- }
-
- io_u = flist_entry(td->verify_list.next, struct io_u, list);
- flist_del_init(&io_u->list);
+ flist_splice_init(&td->verify_list, &list);
pthread_mutex_unlock(&td->io_u_lock);
- ret = verify_io_u(td, io_u);
- put_io_u(td, io_u);
+ if (flist_empty(&list))
+ continue;
+
+ while (!flist_empty(&list)) {
+ io_u = flist_entry(list.next, struct io_u, list);
+ flist_del_init(&io_u->list);
+
+ ret |= verify_io_u(td, io_u);
+ put_io_u(td, io_u);
+ }
} while (!ret);
done: