• Su Yue's avatar
    btrfs: initialize fs_info::csum_size earlier in open_ctree · 83c68bbc
    Su Yue authored
    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 55fc29be ("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: 55fc29be ("btrfs: use cached value of fs_info::csum_size everywhere")
    Signed-off-by: default avatarSu Yue <l@damenly.su>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    83c68bbc
disk-io.c 133 KB