• Filipe Manana's avatar
    btrfs: send: avoid extra b+tree searches when checking reference overrides · 498581f3
    Filipe Manana authored
    During an incremental send, when processing the new references of an inode
    (either it's a new inode or an existing one renamed/moved), he will search
    the b+tree of the send or parent roots in order to find out the inode item
    of the parent directory and extract its generation. However we are doing
    that search twice, once with is_inode_existent() -> get_cur_inode_state()
    and then again at did_overwrite_ref() or will_overwrite_ref().
    
    So avoid that and get the generation at get_cur_inode_state() and then
    propagate it up to did_overwrite_ref() and will_overwrite_ref().
    
    This patch is part of a larger patchset and the changelog of the last
    patch in the series contains a sample performance test and results.
    The patches that comprise the patchset are the following:
    
      btrfs: send: directly return from did_overwrite_ref() and simplify it
      btrfs: send: avoid unnecessary generation search at did_overwrite_ref()
      btrfs: send: directly return from will_overwrite_ref() and simplify it
      btrfs: send: avoid extra b+tree searches when checking reference overrides
      btrfs: send: remove send_progress argument from can_rmdir()
      btrfs: send: avoid duplicated orphan dir allocation and initialization
      btrfs: send: avoid unnecessary orphan dir rbtree search at can_rmdir()
      btrfs: send: reduce searches on parent root when checking if dir can be removed
      btrfs: send: iterate waiting dir move rbtree only once when processing refs
      btrfs: send: initialize all the red black trees earlier
      btrfs: send: genericize the backref cache to allow it to be reused
      btrfs: adapt lru cache to allow for 64 bits keys on 32 bits systems
      btrfs: send: cache information about created directories
      btrfs: allow a generation number to be associated with lru cache entries
      btrfs: add an api to delete a specific entry from the lru cache
      btrfs: send: use the lru cache to implement the name cache
      btrfs: send: update size of roots array for backref cache entries
      btrfs: send: cache utimes operations for directories if possible
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    498581f3
send.c 213 KB