• Kent Overstreet's avatar
    bcachefs: Split out discard fastpath · a393f331
    Kent Overstreet authored
    Buckets usually can't be discarded until the transaction that made them
    empty has been committed in the journal.
    
    Tracing has indicated that we're queuing the discard worker excessively,
    only for it to skip over many buckets that are still waiting on a
    journal commit, discarding only one or two buckets per iteration.
    
    We want to switch to only queuing the discard worker after a journal
    flush write, but there's an important optimization we need to preserve:
    if a bucket becomes empty and it was never committed in the journal
    while it was in use, we want to discard it and reuse it right away -
    since overwriting it before the previous writes are flushed from the
    device cache eans those writes only cost bus bandwidth.
    
    So, this patch implements a fast path for buckets that can be discarded
    right away. We need new locking between the two discard workers; the new
    list of buckets being discarded provides that locking.
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    a393f331
alloc_background.c 59.5 KB