From bee1d2c24ab463a0f5c1e28cb70f6b89e0278d22 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Mon, 9 Jan 2017 15:02:02 +0100 Subject: [PATCH] rbd-mirror: hold owner lock when testing if lock owner Signed-off-by: Mykola Golub (cherry picked from commit 82aa89668d666f434cd19ff444223017b5512c6a) --- .../image_replayer/OpenLocalImageRequest.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc index 1d331f906a840..fdb2b85550184 100644 --- a/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/OpenLocalImageRequest.cc @@ -166,11 +166,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); -- 2.39.5