• Filipe Manana's avatar
    Btrfs: improve performance on fsync of files with multiple hardlinks · b8aa330d
    Filipe Manana authored
    Commit 41bd6067 ("Btrfs: fix fsync of files with multiple hard links
    in new directories") introduced a path that makes fsync fallback to a full
    transaction commit in order to avoid losing hard links and new ancestors
    of the fsynced inode. That path is triggered only when the inode has more
    than one hard link and either has a new hard link created in the current
    transaction or the inode was evicted and reloaded in the current
    transaction.
    
    That path ends up getting triggered very often (hundreds of times) during
    the course of pgbench benchmarks, resulting in performance drops of about
    20%.
    
    This change restores the performance by not triggering the full transaction
    commit in those cases, and instead iterate the fs/subvolume tree in search
    of all possible new ancestors, for all hard links, to log them.
    Reported-by: default avatarZhao Yuhu <zyuhu@suse.com>
    Tested-by: default avatarJames Wang <jnwang@suse.com>
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    b8aa330d
btrfs_inode.h 9.35 KB