]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
rbd-mirror: take MirrorStatusUpdater lock by value in queue_update_task 70033/head
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Tue, 7 Jul 2026 02:03:59 +0000 (19:03 -0700)
committerSun Yuechi <sunyuechi@iscas.ac.cn>
Wed, 8 Jul 2026 11:34:52 +0000 (19:34 +0800)
commitb450195246cfeb7eabcaf8da53a433b98f279fee
treef13126ae271c7a39d6e0c14e1caef223ac0f4e37
parent83f218a9096cb4e8e6d034be2e88f4720071bcfa
rbd-mirror: take MirrorStatusUpdater lock by value in queue_update_task

queue_update_task() took the lock by rvalue reference, so its early
returns never released it. In handle_update_task() that left m_lock
held across the on_finish->complete() calls; during shutdown a
completion can re-enter try_remove_mirror_image_status() and re-lock
m_lock, deadlocking.

Take the unique_lock by value so it unlocks on every return path.

Fixes: https://tracker.ceph.com/issues/78047
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
src/tools/rbd_mirror/MirrorStatusUpdater.cc
src/tools/rbd_mirror/MirrorStatusUpdater.h