bcachefs: Ratelimit checksum error messages

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2024-06-28 13:51:38 -04:00
parent 0f3372dcee
commit 5e3c208325
2 changed files with 7 additions and 3 deletions

View file

@ -10,6 +10,7 @@
#include <linux/xxhash.h> #include <linux/xxhash.h>
#include <linux/key.h> #include <linux/key.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/ratelimit.h>
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
#include <crypto/algapi.h> #include <crypto/algapi.h>
#include <crypto/chacha.h> #include <crypto/chacha.h>
@ -436,7 +437,7 @@ int bch2_rechecksum_bio(struct bch_fs *c, struct bio *bio,
if (bch2_crc_cmp(merged, crc_old.csum) && !c->opts.no_data_io) { if (bch2_crc_cmp(merged, crc_old.csum) && !c->opts.no_data_io) {
struct printbuf buf = PRINTBUF; struct printbuf buf = PRINTBUF;
prt_printf(&buf, "checksum error in %s() (memory corruption or bug?)\n" prt_printf(&buf, "checksum error in %s() (memory corruption or bug?)\n"
"expected %0llx:%0llx got %0llx:%0llx (old type ", " expected %0llx:%0llx got %0llx:%0llx (old type ",
__func__, __func__,
crc_old.csum.hi, crc_old.csum.hi,
crc_old.csum.lo, crc_old.csum.lo,
@ -446,7 +447,7 @@ int bch2_rechecksum_bio(struct bch_fs *c, struct bio *bio,
prt_str(&buf, " new type "); prt_str(&buf, " new type ");
bch2_prt_csum_type(&buf, new_csum_type); bch2_prt_csum_type(&buf, new_csum_type);
prt_str(&buf, ")"); prt_str(&buf, ")");
bch_err(c, "%s", buf.buf); WARN_RATELIMIT(1, "%s", buf.buf);
printbuf_exit(&buf); printbuf_exit(&buf);
return -EIO; return -EIO;
} }

View file

@ -1080,7 +1080,10 @@ static int bch2_write_extent(struct bch_write_op *op, struct write_point *wp,
*_dst = dst; *_dst = dst;
return more; return more;
csum_err: csum_err:
bch_err(c, "%s write error: error verifying existing checksum while rewriting existing data (memory corruption?)", bch_err_inum_offset_ratelimited(c,
op->pos.inode,
op->pos.offset << 9,
"%s write error: error verifying existing checksum while rewriting existing data (memory corruption?)",
op->flags & BCH_WRITE_MOVE ? "move" : "user"); op->flags & BCH_WRITE_MOVE ? "move" : "user");
ret = -EIO; ret = -EIO;
err: err: