Skip to content

Commit ed22d2e

Browse files
authored
Merge pull request ceph#62849 from VinayBhaskar-V/WIP-instancereplayer-crash
rbd-mirror: release lock before calling m_async_op_tracker.finish_op() Reviewed-by: Ilya Dryomov <[email protected]>
2 parents 4d2aa06 + 07e4407 commit ed22d2e

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/tools/rbd_mirror/InstanceReplayer.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -370,12 +370,9 @@ void InstanceReplayer<I>::queue_start_image_replayers() {
370370
}
371371

372372
template <typename I>
373-
void InstanceReplayer<I>::start_image_replayers(int r) {
374-
dout(10) << dendl;
375-
376-
std::lock_guard locker{m_lock};
373+
void InstanceReplayer<I>::start_image_replayers(
374+
const std::unique_lock<ceph::mutex>&) {
377375
if (m_on_shut_down != nullptr) {
378-
m_async_op_tracker.finish_op();
379376
return;
380377
}
381378

@@ -407,7 +404,15 @@ void InstanceReplayer<I>::start_image_replayers(int r) {
407404
m_service_daemon->add_or_update_namespace_attribute(
408405
m_local_io_ctx.get_id(), m_local_io_ctx.get_namespace(),
409406
SERVICE_DAEMON_ERROR_COUNT_KEY, error_count);
407+
}
410408

409+
template <typename I>
410+
void InstanceReplayer<I>::start_image_replayers(int r) {
411+
dout(10) << dendl;
412+
{
413+
std::unique_lock locker{m_lock};
414+
start_image_replayers(locker);
415+
}
411416
m_async_op_tracker.finish_op();
412417
}
413418

src/tools/rbd_mirror/InstanceReplayer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ class InstanceReplayer {
118118

119119
void start_image_replayer(ImageReplayer<ImageCtxT> *image_replayer);
120120
void queue_start_image_replayers();
121+
void start_image_replayers(const std::unique_lock<ceph::mutex>&);
121122
void start_image_replayers(int r);
122123

123124
void stop_image_replayer(ImageReplayer<ImageCtxT> *image_replayer,

0 commit comments

Comments
 (0)