From: Mykola Golub Date: Mon, 9 Jan 2017 14:02:02 +0000 (+0100) Subject: rbd-mirror: hold owner lock when testing if lock owner X-Git-Tag: v12.0.0~218^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=82aa89668d666f434cd19ff444223017b5512c6a;p=ceph.git rbd-mirror: hold owner lock when testing if lock owner Signed-off-by: Mykola Golub --- diff --git a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc index ff1493ddfd42..64025b3265f8 100644 --- a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc @@ -170,11 +170,16 @@ void OpenLocalImageRequest::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);