• Josef Bacik's avatar
    btrfs: delayed refs pre-flushing should only run the heads we have · 61a56a99
    Josef Bacik authored
    Previously our delayed ref running used the total number of items as the
    items to run.  However we changed that to number of heads to run with
    the delayed_refs_rsv, as generally we want to run all of the operations
    for one bytenr.
    
    But with btrfs_run_delayed_refs(trans, 0) we set our count to 2x the
    number of items that we have.  This is generally fine, but if we have
    some operation generation loads of delayed refs while we're doing this
    pre-flushing in the transaction commit, we'll just spin forever doing
    delayed refs.
    
    Fix this to simply pick the number of delayed refs we currently have,
    that way we do not end up doing a lot of extra work that's being
    generated in other threads.
    Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    61a56a99
extent-tree.c 157 KB