]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
crimson/os/seastore: wake blocked IO on BackgroundProcess wakeup 69275/head
authorShai Fultheim <shai.fultheim@gmail.com>
Thu, 28 May 2026 07:24:05 +0000 (10:24 +0300)
committerShai Fultheim <shai.fultheim@gmail.com>
Tue, 9 Jun 2026 11:13:49 +0000 (14:13 +0300)
commit8f3a16656982dfdfd55a6229c90884de365036e1
tree5bac9c762a7248e46d9b93cd29523c0960651921
parente8e8e6fe6a356a4c622582a4c462b5f8b595f9bd
crimson/os/seastore: wake blocked IO on BackgroundProcess wakeup

BackgroundProcess::run() blocks on blocking_background when
background_should_run() returns false. When the loop wakes up —
typically because arm_blocking_io_and_wake() kicked it — the loop
re-checks background_should_run(). If that still returns false
(e.g. the cleaner has no pending work), the loop goes straight back
to sleep.

But the wake may also have been triggered by a change in the space-
availability condition (should_block_io) — and there is no path that
re-evaluates blocked user IO when background_should_run is false. The
blocked IO has no future trigger to re-check, and stays stuck until
the next unrelated wake-up happens to come at the right moment, or
never.

Add a maybe_wake_blocked_io() call right after the wake. It's a no-op
when nothing is blocked, and unblocks IO that the space condition has
already cleared otherwise.

Observed in sustained random-write benches that wedged with IO blocked
indefinitely while the cleaner sat idle (should_run=false).

Signed-off-by: Shai Fultheim <shai.fultheim@gmail.com>
src/crimson/os/seastore/extent_placement_manager.cc