• Filipe Manana's avatar
    btrfs: avoid checking for RO block group twice during nocow writeback · 20903032
    Filipe Manana authored
    During the nocow writeback path, we currently iterate the rbtree of block
    groups twice: once for checking if the target block group is RO with the
    call to btrfs_extent_readonly()), and once again for getting a nocow
    reference on the block group with a call to btrfs_inc_nocow_writers().
    
    Since btrfs_inc_nocow_writers() already returns false when the target
    block group is RO, remove the call to btrfs_extent_readonly(). Not only
    we avoid searching the blocks group rbtree twice, it also helps reduce
    contention on the lock that protects it (specially since it is a spin
    lock and not a read-write lock). That may make a noticeable difference
    on very large filesystems, with thousands of allocated block groups.
    Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
    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>
    20903032
inode.c 294 KB