bcachefs: Improve checksum error messages
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 18 Jun 2022 23:03:25 +0000 (19:03 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:34 +0000 (17:09 -0400)
We're seeing checksum errors in the bch2_rechecksum_bio() path - give it
a better error message to help track this down.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/checksum.c
fs/bcachefs/io.c

index e23b221..7c2af67 100644 (file)
@@ -425,8 +425,17 @@ int bch2_rechecksum_bio(struct bch_fs *c, struct bio *bio,
                merged = bch2_checksum_bio(c, crc_old.csum_type,
                                extent_nonce(version, crc_old), bio);
 
-       if (bch2_crc_cmp(merged, crc_old.csum))
+       if (bch2_crc_cmp(merged, crc_old.csum)) {
+               bch_err(c, "checksum error in bch2_rechecksum_bio() (memory corruption or bug?)\n"
+                       "expected %0llx:%0llx got %0llx:%0llx (old type %s new type %s)",
+                       crc_old.csum.hi,
+                       crc_old.csum.lo,
+                       merged.hi,
+                       merged.lo,
+                       bch2_csum_types[crc_old.csum_type],
+                       bch2_csum_types[new_csum_type]);
                return -EIO;
+       }
 
        for (i = splits; i < splits + ARRAY_SIZE(splits); i++) {
                if (i->crc)
index f41d794..9178918 100644 (file)
@@ -1186,8 +1186,7 @@ do_write:
        *_dst = dst;
        return more;
 csum_err:
-       bch_err(c, "error verifying existing checksum while "
-               "rewriting existing data (memory corruption?)");
+       bch_err(c, "error verifying existing checksum while rewriting existing data (memory corruption?)");
        ret = -EIO;
 err:
        if (to_wbio(dst)->bounce)
@@ -1977,9 +1976,9 @@ csum_err:
        }
 
        bch2_dev_inum_io_error(ca, rbio->read_pos.inode, (u64) rbio->bvec_iter.bi_sector,
-               "data checksum error: expected %0llx:%0llx got %0llx:%0llx (type %u)",
+               "data checksum error: expected %0llx:%0llx got %0llx:%0llx (type %s)",
                rbio->pick.crc.csum.hi, rbio->pick.crc.csum.lo,
-               csum.hi, csum.lo, crc.csum_type);
+               csum.hi, csum.lo, bch2_csum_types[crc.csum_type]);
        bch2_rbio_error(rbio, READ_RETRY_AVOID, BLK_STS_IOERR);
        goto out;
 decompression_err: