From: Xuehan Xu Date: Mon, 25 Aug 2025 07:09:12 +0000 (+0000) Subject: crimson/osd/recovery_backend: interrupt all recovery_waiter X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F65234%2Fhead;p=ceph.git crimson/osd/recovery_backend: interrupt all recovery_waiter unconditionally when cleaning up the recovery backend All recovery_waiter will cleared when the recovery backend is cleaned up, so all of them should be interrupted. Fixes: https://tracker.ceph.com/issues/72706 Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index d27b231e64df..c47f26335bef 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -55,15 +55,12 @@ void RecoveryBackend::clean_up(ceph::os::Transaction& t, replica_push_targets.clear(); for (auto& [soid, recovery_waiter] : recovering) { - if ((recovery_waiter->pull_info - && recovery_waiter->pull_info->is_complete()) - || (!recovery_waiter->pull_info - && recovery_waiter->obc && recovery_waiter->obc->obs.exists)) { + if (recovery_waiter->obc) { recovery_waiter->obc->interrupt( ::crimson::common::actingset_changed( pg.is_primary())); - recovery_waiter->interrupt(why); } + recovery_waiter->interrupt(why); } recovering.clear(); }