• Filipe Manana's avatar
    btrfs: skip logging inodes already logged when logging new entries · 0e44cb3f
    Filipe Manana authored
    When logging new directory entries of a directory, we log the inodes of
    new dentries and the inodes of dentries pointing to directories that
    may have been created in past transactions. For the case of directories
    we log in full mode, which can be particularly expensive for large
    directories.
    
    We do use btrfs_inode_in_log() to skip already logged inodes, however for
    that helper to return true, it requires that the log transaction used to
    log the inode to be already committed. This means that when we have more
    than one task using the same log transaction we can end up logging an
    inode multiple times, which is a waste of time and not necessary since
    the log will be committed by one of the tasks and the others will wait for
    the log transaction to be committed before returning to user space.
    
    So simply replace the use of btrfs_inode_in_log() with the new helper
    function need_log_inode(), introduced in a previous commit.
    
    This patch is part of a patchset comprised of the following patches:
    
      btrfs: remove unnecessary directory inode item update when deleting dir entry
      btrfs: stop setting nbytes when filling inode item for logging
      btrfs: avoid logging new ancestor inodes when logging new inode
      btrfs: skip logging directories already logged when logging all parents
      btrfs: skip logging inodes already logged when logging new entries
      btrfs: remove unnecessary check_parent_dirs_for_sync()
      btrfs: make concurrent fsyncs wait less when waiting for a transaction commit
    
    Performance results, after applying all patches, are mentioned in the
    change log of the last patch.
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    0e44cb3f
tree-log.c 175 KB