]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: release lock before calling m_async_op_tracker.finish_op()
authorVinayBhaskar-V <vvarada@redhat.com>
Thu, 17 Apr 2025 14:29:36 +0000 (19:59 +0530)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:39 +0000 (21:26 +0530)
fix in the InstanceReplayer::start_group_replayers

Signed-off-by: VinayBhaskar-V <vvarada@redhat.com>
src/tools/rbd_mirror/InstanceReplayer.cc
src/tools/rbd_mirror/InstanceReplayer.h

index d7ea67238362e35447227e683d229a0083178e2f..4a163d2a2ba9f90d8352568b567eea98dbf0b4c2 100644 (file)
@@ -693,12 +693,9 @@ void InstanceReplayer<I>::queue_start_group_replayers() {
 }
 
 template <typename I>
-void InstanceReplayer<I>::start_group_replayers(int r) {
-  dout(10) << dendl;
-
-  std::lock_guard locker{m_lock};
+void InstanceReplayer<I>::start_group_replayers(
+    const std::unique_lock<ceph::mutex>&) {
   if (m_on_shut_down != nullptr) {
-    m_async_op_tracker.finish_op();
     return;
   }
 
@@ -730,7 +727,15 @@ void InstanceReplayer<I>::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 <typename I>
+void InstanceReplayer<I>::start_group_replayers(int r) {
+  dout(10) << dendl;
+  {
+    std::unique_lock locker{m_lock};
+    start_group_replayers(locker);
+  }
   m_async_op_tracker.finish_op();
 }
 
index d7a390a3c5fc98b38a9d0e597a3f36319970ff80..bef2ede85a34c7c315eeb0443873a642b0cc3a2d 100644 (file)
@@ -149,6 +149,7 @@ private:
 
   void start_group_replayer(GroupReplayer<ImageCtxT> *group_replayer);
   void queue_start_group_replayers();
+  void start_group_replayers(const std::unique_lock<ceph::mutex>&);
   void start_group_replayers(int r);
 
   void stop_group_replayer(GroupReplayer<ImageCtxT> *group_replayer,