From: David Sterba Date: Fri, 29 May 2020 13:54:41 +0000 (+0200) Subject: btrfs: scrub: simplify data block checksum calculation X-Git-Tag: xarray-5.9~378^2~133 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=771aba0d12dd945132e2c3bbb512f96edc0efbaa;p=users%2Fwilly%2Fxarray.git btrfs: scrub: simplify data block checksum calculation We have sectorsize same as PAGE_SIZE, the checksum can be calculated in one go. Signed-off-by: David Sterba --- diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index aecaf5c7f655..16c83130d884 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -1789,37 +1789,19 @@ static int scrub_checksum_data(struct scrub_block *sblock) u8 *on_disk_csum; struct page *page; char *kaddr; - u64 len; - int index; BUG_ON(sblock->page_count < 1); if (!sblock->pagev[0]->have_csum) return 0; - shash->tfm = fs_info->csum_shash; - crypto_shash_init(shash); - on_disk_csum = sblock->pagev[0]->csum; page = sblock->pagev[0]->page; kaddr = page_address(page); - len = sctx->fs_info->sectorsize; - index = 0; - for (;;) { - u64 l = min_t(u64, len, PAGE_SIZE); - - crypto_shash_update(shash, kaddr, l); - len -= l; - if (len == 0) - break; - index++; - BUG_ON(index >= sblock->page_count); - BUG_ON(!sblock->pagev[index]->page); - page = sblock->pagev[index]->page; - kaddr = page_address(page); - } + shash->tfm = fs_info->csum_shash; + crypto_shash_init(shash); + crypto_shash_digest(shash, kaddr, PAGE_SIZE, csum); - crypto_shash_final(shash, csum); if (memcmp(csum, on_disk_csum, sctx->csum_size)) sblock->checksum_error = 1;