]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
crimson/osd: fix backfill deadlock when only drop operations remain 69942/head
authorRonen Friedman <rfriedma@redhat.com>
Sun, 5 Jul 2026 12:11:01 +0000 (12:11 +0000)
committerRonen Friedman <rfriedma@redhat.com>
Sun, 5 Jul 2026 12:33:02 +0000 (12:33 +0000)
commitf64896d83858425084057e33c1e9beeb5209d653
tree1efa4b0027727d15bae5a1775f8585030aa659a8
parent5be3fa605fb3c05457af87b5a0a1ff6bec7862c8
crimson/osd: fix backfill deadlock when only drop operations remain

BackfillState::Waiting requires an ObjectPushed event to transition
back to Enqueuing, but drop (remove) operations are fire-and-forget
and never generate ObjectPushed. When a backfill round enqueues only
drops and no pushes, the FSM permanently stalls in the Waiting state,
holding the backfill reservation and blocking all other PGs from
backfilling to that OSD.

Fix by adding a pending-pushes counter to ProgressTracker to
distinguish "only drops remain" from "pushes still in-flight". When
all pushes are complete and the namespace is exhausted, drain remaining
drop entries and advance last_backfill to MAX so that
OP_BACKFILL_FINISH triggers the normal completion path via
RequestDone.

The classic OSD avoids this by design: drops are never tracked as
in-flight operations in recover_backfill() and are drained inline.

Fixes: https://tracker.ceph.com/issues/77936
Assisted-by: Claude <claude.ai>
Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
src/crimson/osd/backfill_state.cc
src/crimson/osd/backfill_state.h