• Filipe Manana's avatar
    btrfs: do not test for free space inode during NOCOW check against file extent · a7bb6bd4
    Filipe Manana authored
    When checking if we can do a NOCOW write against a range covered by a file
    extent item, we do a quick a check to determine if the inode's root was
    snapshotted in a generation older than the generation of the file extent
    item or not. This is to quickly determine if the extent is likely shared
    and avoid the expensive check for cross references (this was added in
    commit 78d4295b ("btrfs: lift some btrfs_cross_ref_exist checks in
    nocow path").
    
    We restrict that check to the case where the inode is not a free space
    inode (since commit 27a7ff55 ("btrfs: skip file_extent generation
    check for free_space_inode in run_delalloc_nocow")). That is because when
    we had the inode cache feature, inode caches were backed by a free space
    inode that belonged to the inode's root.
    
    However we don't have support for the inode cache feature since kernel
    5.11, so we don't need this check anymore since free space inodes are
    now always related to free space caches, which are always associated to
    the root tree (which can't be snapshotted, and its last_snapshot field
    is always 0).
    
    So remove that condition.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    a7bb6bd4
inode.c 323 KB