aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2020-03-02 14:02:49 -0800
committerDavid Sterba <dsterba@suse.com>2020-03-03 15:26:08 +0100
commite7a04894c766daa4248cb736efee93550f2d5872 (patch)
tree500ed1c5e3a81c03d1c70c7c3f3e44e476a154e5 /arch/sh
parentBtrfs: fix deadlock during fast fsync when logging prealloc extents beyond eof (diff)
downloadlinux-dev-e7a04894c766daa4248cb736efee93550f2d5872.tar.xz
linux-dev-e7a04894c766daa4248cb736efee93550f2d5872.zip
btrfs: fix RAID direct I/O reads with alternate csums
btrfs_lookup_and_bind_dio_csum() does pointer arithmetic which assumes 32-bit checksums. If using a larger checksum, this leads to spurious failures when a direct I/O read crosses a stripe. This is easy to reproduce: # mkfs.btrfs -f --checksum blake2 -d raid0 /dev/vdc /dev/vdd ... # mount /dev/vdc /mnt # cd /mnt # dd if=/dev/urandom of=foo bs=1M count=1 status=none # dd if=foo of=/dev/null bs=1M iflag=direct status=none dd: error reading 'foo': Input/output error # dmesg | tail -1 [ 135.821568] BTRFS warning (device vdc): csum failed root 5 ino 257 off 421888 ... Fix it by using the actual checksum size. Fixes: 1e25a2e3ca0d ("btrfs: don't assume ordered sums to be 4 bytes") CC: stable@vger.kernel.org # 5.4+ Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Omar Sandoval <osandov@fb.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'arch/sh')
0 files changed, 0 insertions, 0 deletions