]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #69824 from mohit84/backfill_stuck
authormohit84 <moagrawa@redhat.com>
Wed, 22 Jul 2026 12:26:12 +0000 (17:56 +0530)
committerGitHub <noreply@github.com>
Wed, 22 Jul 2026 12:26:12 +0000 (17:56 +0530)
crimson/osd: fix backfill deadlock in BackfillState::Waiting

BackfillState::Enqueuing unconditionally posts RequestWaiting{}
when budget available return false. Waiting can exit only via
ObjectPushed which requires an in-flight push. If the budget
is exhausted with no pushes in flight no objectPush will ever
arrive and the PG stalls permanently.

Solution: Introduce a dedicated BudgetBlocked state. When
budget_available() is false and tracked_objects_completed()==true
post RequestBudgetBlocked{} instead of RequestWaiting{}.
BudgetBlocked calls get_backfill_throttle() to suspend until a slots
free up, then fires BudgetAvailable{} which transitions directly back
to Enqueuing to dispatch the next batch of pushes.

Fixes: https://tracker.ceph.com/issues/77804
1  2 
src/crimson/osd/pg_recovery.cc

Simple merge