]> 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)
committerMykola Golub <mgolub@mirantis.com>
Mon, 9 Jan 2017 14:05:05 +0000 (15:05 +0100)
Signed-off-by: Mykola Golub <mgolub@mirantis.com>
src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc

index ff1493ddfd42d02f489db000eff571a84d7b7048..64025b3265f8d49946576ca1bf58ffcc050a9033 100644 (file)
@@ -170,11 +170,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);