• L
    Btrfs: don't make a file partly checksummed through file clone · 0e7b824c
    Li Zefan 提交于
    To reproduce the bug:
    
      # mount /dev/sda7 /mnt
      # dd if=/dev/zero of=/mnt/src bs=4K count=1
      # umount /mnt
    
      # mount -o nodatasum /dev/sda7 /mnt
      # dd if=/dev/zero of=/mnt/dst bs=4K count=1
      # clone_range -s 4K -l 4K /mnt/src /mnt/dst
    
      # echo 3 > /proc/sys/vm/drop_caches
      # cat /mnt/dst
      # dmesg
      ...
      btrfs no csum found for inode 258 start 0
      btrfs csum failed ino 258 off 0 csum 2566472073 private 0
    
    It's because part of the file is checksummed and the other part is not,
    and then btrfs will complain checksum is not found when we read the file.
    
    Disallow file clone if src and dst file have different checksum flag,
    so we ensure a file is completely checksummed or unchecksummed.
    Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
    Signed-off-by: NChris Mason <chris.mason@oracle.com>
    0e7b824c
ioctl.c 70.5 KB