]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: hold owner lock when testing if lock owner
authorMykola Golub <mgolub@mirantis.com>
Mon, 9 Jan 2017 14:02:02 +0000 (15:02 +0100)
committerNathan Cutler <ncutler@suse.com>
Thu, 2 Feb 2017 13:19:17 +0000 (14:19 +0100)
Signed-off-by: Mykola Golub <mgolub@mirantis.com>
(cherry picked from commit 82aa89668d666f434cd19ff444223017b5512c6a)

src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc

index 1d331f906a84084607f480e576a3c5626df6b521..fdb2b855501847b4b624ec0eae744c51f07b6636 100644 (file)
@@ -166,11 +166,16 @@ void OpenLocalImageRequest<I>::handle_lock_image(int r) {
        << cpp_strerror(r) << dendl;
     send_close_image(false, r);
     return;
-  } else if ((*m_local_image_ctx)->exclusive_lock == nullptr ||
-             !(*m_local_image_ctx)->exclusive_lock->is_lock_owner()) {
-    derr << ": image is not locked" << dendl;
-    send_close_image(false, -EBUSY);
-    return;
+  }
+
+  {
+    RWLock::RLocker owner_locker((*m_local_image_ctx)->owner_lock);
+    if ((*m_local_image_ctx)->exclusive_lock == nullptr ||
+       !(*m_local_image_ctx)->exclusive_lock->is_lock_owner()) {
+      derr << ": image is not locked" << dendl;
+      send_close_image(false, -EBUSY);
+      return;
+    }
   }
 
   finish(0);