btrfs: scrub: simplify data block checksum calculation
authorDavid Sterba <dsterba@suse.com>
Fri, 29 May 2020 13:54:41 +0000 (15:54 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 27 Jul 2020 10:55:23 +0000 (12:55 +0200)
We have sectorsize same as PAGE_SIZE, the checksum can be calculated in
one go.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/scrub.c

index aecaf5c7f655008640e45b97bbaec448e0bebdac..16c83130d88405b7a55c7acc7e1101b207824049 100644 (file)
@@ -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;