From: VinayBhaskar-V Date: Thu, 17 Apr 2025 14:29:36 +0000 (+0530) Subject: rbd-mirror: release lock before calling m_async_op_tracker.finish_op() X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=9069d455fa24a3cf9240e5bf740dcf23663970a3;p=ceph.git rbd-mirror: release lock before calling m_async_op_tracker.finish_op() fix in the InstanceReplayer::start_group_replayers Signed-off-by: VinayBhaskar-V --- diff --git a/src/tools/rbd_mirror/InstanceReplayer.cc b/src/tools/rbd_mirror/InstanceReplayer.cc index d7ea67238362e..4a163d2a2ba9f 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.cc +++ b/src/tools/rbd_mirror/InstanceReplayer.cc @@ -693,12 +693,9 @@ void InstanceReplayer::queue_start_group_replayers() { } template -void InstanceReplayer::start_group_replayers(int r) { - dout(10) << dendl; - - std::lock_guard locker{m_lock}; +void InstanceReplayer::start_group_replayers( + const std::unique_lock&) { if (m_on_shut_down != nullptr) { - m_async_op_tracker.finish_op(); return; } @@ -730,7 +727,15 @@ void InstanceReplayer::start_group_replayers(int r) { m_service_daemon->add_or_update_namespace_attribute( m_local_io_ctx.get_id(), m_local_io_ctx.get_namespace(), SERVICE_DAEMON_GROUP_ERROR_COUNT_KEY, error_count); +} +template +void InstanceReplayer::start_group_replayers(int r) { + dout(10) << dendl; + { + std::unique_lock locker{m_lock}; + start_group_replayers(locker); + } m_async_op_tracker.finish_op(); } diff --git a/src/tools/rbd_mirror/InstanceReplayer.h b/src/tools/rbd_mirror/InstanceReplayer.h index d7a390a3c5fc9..bef2ede85a34c 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.h +++ b/src/tools/rbd_mirror/InstanceReplayer.h @@ -149,6 +149,7 @@ private: void start_group_replayer(GroupReplayer *group_replayer); void queue_start_group_replayers(); + void start_group_replayers(const std::unique_lock&); void start_group_replayers(int r); void stop_group_replayer(GroupReplayer *group_replayer,