]> git.apps.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>
Tue, 4 Jul 2017 20:48:18 +0000 (22:48 +0200)
Signed-off-by: Mykola Golub <mgolub@mirantis.com>
(cherry picked from commit 82aa89668d666f434cd19ff444223017b5512c6a)

src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc

index 5f7689fa96f1500dd030f4fd612eae9dfc07d537..49e3082d005a30f2e757c703b4c33e44f672d1bd 100644 (file)
@@ -169,11 +169,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);