• Brian Foster's avatar
    bcachefs: fix lost journal buf wakeup due to improved pipelining · ada02c20
    Brian Foster authored
    The journal_write_done() handler was reworked into a loop in commit
    746a33c96b7a ("bcachefs: better journal pipelining"). As part of this,
    the journal buffer wake was factored into a post-loop branch that
    executes if at least one journal buffer has completed.
    
    The journal buffer processing loop iterates on the journal buffer
    pointer, however. This means that w refers to the last buffer processed
    by the loop, which may or may not be done. This also means that if
    multiple buffers are processed by the loop, only the last is awoken.
    This lost wakeup behavior has lead to stalling problems in various CI
    and fstests, such as generic/703.
    
    Lift the wake into the loop so each done buffer sees a wake call as
    it is processed.
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    ada02c20
journal_io.c 53.5 KB