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: v11.2.1~80^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4035dc6fdaf9df06ffeb8b86813046a1b5e0cff2;p=ceph.git rbd-mirror: hold owner lock when testing if lock owner Signed-off-by: Mykola Golub (cherry picked from commit 82aa89668d666f434cd19ff444223017b5512c6a) --- diff --git a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc index 5f7689fa96f..49e3082d005 100644 --- a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc @@ -169,11 +169,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);