btrfs: replace memset with memzero_page in data checksum verification
authorQu Wenruo <wqu@suse.com>
Fri, 25 Mar 2022 09:37:59 +0000 (17:37 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 May 2022 15:03:10 +0000 (17:03 +0200)
The original code resets the page to 0x1 for not apparent reason, it's
been like that since the initial 2007 code added in commit 07157aacb1ec
("Btrfs: Add file data csums back in via hooks in the extent map code").

It could mean that a failed buffer can be detected from the data but
that's just a guess and any value is good.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
[ update changelog ]
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index b3f2010..d16d1dc 100644 (file)
@@ -3275,11 +3275,11 @@ static int check_data_csum(struct inode *inode, struct btrfs_bio *bbio,
        shash->tfm = fs_info->csum_shash;
 
        crypto_shash_digest(shash, kaddr + pgoff, len, csum);
+       kunmap_atomic(kaddr);
 
        if (memcmp(csum, csum_expected, csum_size))
                goto zeroit;
 
-       kunmap_atomic(kaddr);
        return 0;
 zeroit:
        btrfs_print_data_csum_error(BTRFS_I(inode), start, csum, csum_expected,
@@ -3287,9 +3287,7 @@ zeroit:
        if (bbio->device)
                btrfs_dev_stat_inc_and_print(bbio->device,
                                             BTRFS_DEV_STAT_CORRUPTION_ERRS);
-       memset(kaddr + pgoff, 1, len);
-       flush_dcache_page(page);
-       kunmap_atomic(kaddr);
+       memzero_page(page, pgoff, len);
        return -EIO;
 }