]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fixed deadlock while attempting to flush AIO requests 6632/head
authorJason Dillaman <dillaman@redhat.com>
Mon, 9 Nov 2015 16:22:24 +0000 (11:22 -0500)
committerAbhishek Varshney <abhishek.varshney@flipkart.com>
Wed, 18 Nov 2015 08:06:32 +0000 (13:36 +0530)
In-flight AIO requests might force a flush if a snapshot was created
out-of-band.  The flush completion was previously invoked asynchronously,
potentially via the same thread worker handling the AIO request. This
resulted in the flush operation deadlocking since it can't complete.

Fixes: #13726
Backport: infernalis, hammer
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit bfeb90e5fe24347648c72345881fd3d932243c98)

src/librbd/ImageCtx.cc

index c68b45ccf2beb34fc89b303c590ae102728f36be..7c186a2d7d20ab6844db1d0f8317692fac4f9d6a 100644 (file)
@@ -784,7 +784,7 @@ public:
   void ImageCtx::flush_async_operations(Context *on_finish) {
     Mutex::Locker l(async_ops_lock);
     if (async_ops.empty()) {
-      op_work_queue->queue(on_finish, 0);
+      on_finish->complete(0);
       return;
     }