]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
rbd-mirror: take MirrorStatusUpdater lock by value in queue_update_task 70591/head
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Tue, 7 Jul 2026 02:03:59 +0000 (19:03 -0700)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 27 Jul 2026 18:05:57 +0000 (20:05 +0200)
commitddd2418363a06b8631c4ce511cfe00a682861844
tree6904136b73f51228b62cd8a796e8cbb5c3a39564
parent2d5e0bb24629bd3f4c40c7ba98b9cce1bd12180a
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>
(cherry picked from commit b450195246cfeb7eabcaf8da53a433b98f279fee)
src/tools/rbd_mirror/MirrorStatusUpdater.cc
src/tools/rbd_mirror/MirrorStatusUpdater.h