]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fixed deadlock while attempting to flush AIO requests 6586/head
authorJason Dillaman <dillaman@redhat.com>
Mon, 9 Nov 2015 16:22:24 +0000 (11:22 -0500)
committerAbhishek Lekshmanan <abhishek.lekshmanan@ril.com>
Sat, 14 Nov 2015 18:41:55 +0000 (00:11 +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 0f5d46a56f468132a25e5f80dae9ccc9f22298c1..1574c56896fbfd404e4761a556f2ef71f1a75f89 100644 (file)
@@ -807,7 +807,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;
     }