• Filipe Manana's avatar
    btrfs: avoid starting and committing empty transaction when flushing space · 2ee70ed1
    Filipe Manana authored
    When flushing space and we are in the COMMIT_TRANS state, we join a
    transaction with btrfs_join_transaction() and then commit the returned
    transaction. However btrfs_join_transaction() starts a new transaction if
    there is none currently open, which is pointless since comitting a new,
    empty transaction, doesn't achieve anything, it only wastes time, IO and
    creates an unnecessary rotation of the backup roots.
    
    So use btrfs_attach_transaction_barrier() to avoid starting a new
    transaction. This also waits for any ongoing transaction that is
    committing (state >= TRANS_STATE_COMMIT_DOING) to fully complete, and
    therefore wait for all the extents that were pinned during the
    transaction's lifetime to be unpinned.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    2ee70ed1
space-info.c 59.1 KB