From: Mykola Golub Date: Fri, 5 May 2017 09:56:50 +0000 (+0200) Subject: rbd-mirror: resolve potential recursive lock X-Git-Tag: v12.1.0~252^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=55f9c625bdf9a910317e45ac60bb321c8c2c1ae2;p=ceph.git rbd-mirror: resolve potential recursive lock Would have been possible when release_image had lead to cancel sync (i.e. cancel_sync_request). Signed-off-by: Mykola Golub --- diff --git a/src/tools/rbd_mirror/InstanceWatcher.cc b/src/tools/rbd_mirror/InstanceWatcher.cc index 4bedf7009065d..c42ee2fc1e07d 100644 --- a/src/tools/rbd_mirror/InstanceWatcher.cc +++ b/src/tools/rbd_mirror/InstanceWatcher.cc @@ -785,8 +785,16 @@ void InstanceWatcher::handle_image_acquire( const std::string &peer_image_id, Context *on_finish) { dout(20) << "global_image_id=" << global_image_id << dendl; - m_instance_replayer->acquire_image(global_image_id, peer_mirror_uuid, - peer_image_id, on_finish); + auto ctx = new FunctionContext( + [this, global_image_id, peer_mirror_uuid, peer_image_id, + on_finish] (int r) { + m_instance_replayer->acquire_image(global_image_id, peer_mirror_uuid, + peer_image_id, on_finish); + m_notify_op_tracker.finish_op(); + }); + + m_notify_op_tracker.start_op(); + m_work_queue->queue(ctx, 0); } template @@ -795,8 +803,17 @@ void InstanceWatcher::handle_image_release( const std::string &peer_image_id, bool schedule_delete, Context *on_finish) { dout(20) << "global_image_id=" << global_image_id << dendl; - m_instance_replayer->release_image(global_image_id, peer_mirror_uuid, - peer_image_id, schedule_delete, on_finish); + auto ctx = new FunctionContext( + [this, global_image_id, peer_mirror_uuid, peer_image_id, schedule_delete, + on_finish] (int r) { + m_instance_replayer->release_image(global_image_id, peer_mirror_uuid, + peer_image_id, schedule_delete, + on_finish); + m_notify_op_tracker.finish_op(); + }); + + m_notify_op_tracker.start_op(); + m_work_queue->queue(ctx, 0); } template