]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: initialize fs_info::csum_size earlier in open_ctree
authorSu Yue <l@damenly.su>
Thu, 11 Feb 2021 08:38:28 +0000 (16:38 +0800)
committerDavid Sterba <dsterba@suse.com>
Fri, 12 Feb 2021 13:48:24 +0000 (14:48 +0100)
commit2bc34cb6194f31b24c89555c493d8edeac6f72e9
tree1f096452c2e5b57c033eeeb41018983b8dfd3a1e
parentb2df473b08dd82250facad20b82e3fc602ea2647
btrfs: initialize fs_info::csum_size earlier in open_ctree

User reported that btrfs-progs misc-tests/028-superblock-recover fails:

      [TEST/misc]   028-superblock-recover
  unexpected success: mounted fs with corrupted superblock
  test failed for case 028-superblock-recover

The test case expects that a broken image with bad superblock will be
rejected to be mounted. However, the test image just passed csum check
of superblock and was successfully mounted.

Commit dd11c5aea27a ("btrfs: use cached value of fs_info::csum_size
everywhere") replaces all calls to btrfs_super_csum_size by
fs_info::csum_size. The calls include the place where fs_info->csum_size
is not initialized. So btrfs_check_super_csum() passes because memcmp()
with len 0 always returns 0.

Fix it by caching csum size in btrfs_fs_info::csum_size once we know the
csum type in superblock is valid in open_ctree().

Link: https://github.com/kdave/btrfs-progs/issues/250
Fixes: dd11c5aea27a ("btrfs: use cached value of fs_info::csum_size everywhere")
Signed-off-by: Su Yue <l@damenly.su>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c