• Filipe Manana's avatar
    btrfs: reject encoded write if inode has nodatasum flag set · 1bd96c92
    Filipe Manana authored
    Currently we allow an encoded write against inodes that have the NODATASUM
    flag set, either because they are NOCOW files or they were created while
    the filesystem was mounted with "-o nodatasum". This results in having
    compressed extents without corresponding checksums, which is a filesystem
    inconsistency reported by 'btrfs check'.
    
    For example, running btrfs/281 with MOUNT_OPTIONS="-o nodatacow" triggers
    this and 'btrfs check' errors out with:
    
       [1/7] checking root items
       [2/7] checking extents
       [3/7] checking free space tree
       [4/7] checking fs roots
       root 256 inode 257 errors 1040, bad file extent, some csum missing
       root 256 inode 258 errors 1040, bad file extent, some csum missing
       ERROR: errors found in fs roots
       (...)
    
    So reject encoded writes if the target inode has NODATASUM set.
    
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    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>
    1bd96c92
inode.c 315 KB