• F
    btrfs: don't drop dir index range items when logging a directory · 04fc7d51
    Filipe Manana 提交于
    When logging a directory that was previously logged in the current
    transaction, we drop all the range items (BTRFS_DIR_LOG_INDEX_KEY key
    type). This is because we will process all leaves in the subvolume's tree
    that were changed in the current transaction and then add range items for
    covering new dir index items and deleted dir index items, which could
    cover now a larger range than before.
    
    We used to fail if we tried to insert a range item key that already
    exists, so we dropped all range items to avoid failing. However nowadays,
    since commit 750ee454 ("btrfs: fix assertion failure when logging
    directory key range item"), we simply update any range item that already
    exists, increasing its range's last dir index if needed. Since the range
    covered by a range item can never decrease, due to the fact that dir index
    values come from a monotonically increasing counter and are never reused,
    we can stop dropping all range items before we start logging a directory.
    By not dropping the items we can avoid having occasional tree rebalance
    operations.
    
    This will also be needed for an incoming change where we start logging
    delayed items directly, without flushing them first.
    Signed-off-by: NFilipe Manana <fdmanana@suse.com>
    Signed-off-by: NDavid Sterba <dsterba@suse.com>
    04fc7d51
tree-log.c 195.6 KB