• Filipe Manana's avatar
    btrfs: don't log unnecessary boundary keys when logging directory · a450a4af
    Filipe Manana authored
    Before we start to log dir index keys from a leaf, we check if there is a
    previous index key, which normally is at the end of a leaf that was not
    changed in the current transaction. Then we log that key and set the start
    of logged range (item of type BTRFS_DIR_LOG_INDEX_KEY) to the offset of
    that key. This is to ensure that if there were deleted index keys between
    that key and the first key we are going to log, those deletions are
    replayed in case we need to replay to the log after a power failure.
    However we really don't need to log that previous key, we can just set the
    start of the logged range to that key's offset plus 1. This achieves the
    same and avoids logging one dir index key.
    
    The same logic is performed when we finish logging the index keys of a
    leaf and we find that the next leaf has index keys and was not changed in
    the current transaction. We are logging the first key of that next leaf
    and use its offset as the end of range we log. This is just to ensure that
    if there were deleted index keys between the last index key we logged and
    the first key of that next leaf, those index keys are deleted if we end
    up replaying the log. However that is not necessary, we can avoid logging
    that first index key of the next leaf and instead set the end of the
    logged range to match the offset of that index key minus 1.
    
    So avoid logging those index keys at the boundaries and adjust the start
    and end offsets of the logged ranges as described above.
    
    This patch is part of a patchset comprised of the following patches:
    
      1/4 btrfs: don't log unnecessary boundary keys when logging directory
      2/4 btrfs: put initial index value of a directory in a constant
      3/4 btrfs: stop copying old dir items when logging a directory
      4/4 btrfs: stop trying to log subdirectories created in past transactions
    
    Performance test results are listed in the changelog of patch 3/4.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a450a4af
tree-log.c 186 KB