summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-07-16 22:31:19 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:10:08 -0400
commit970a5096acc223e90c9fad853575c87ee85b02ae (patch)
tree9780b8c68b658cc3d1c8e8b0fcdf3e8e1b72e9ed
parent20e6d9a8d4050220f4e0a0195d102abaf2c8439b (diff)
bcachefs: Suppresss various error messages in no_data_io mode
We commonly use no_data_io mode when debugging filesystem metadata dumps, where data checksum/compression errors are expected and unimportant - this patch suppresses these. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/checksum.c2
-rw-r--r--fs/bcachefs/compress.c3
-rw-r--r--fs/bcachefs/io.c11
3 files changed, 10 insertions, 6 deletions
diff --git a/fs/bcachefs/checksum.c b/fs/bcachefs/checksum.c
index 20d0e8afc1ad..bf03d42c6138 100644
--- a/fs/bcachefs/checksum.c
+++ b/fs/bcachefs/checksum.c
@@ -426,7 +426,7 @@ 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) && !c->opts.no_data_io) {
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,
diff --git a/fs/bcachefs/compress.c b/fs/bcachefs/compress.c
index 560214c15da3..c9ca7cce55f8 100644
--- a/fs/bcachefs/compress.c
+++ b/fs/bcachefs/compress.c
@@ -240,7 +240,8 @@ int bch2_bio_uncompress_inplace(struct bch_fs *c, struct bio *bio,
data = __bounce_alloc(c, dst_len, WRITE);
if (__bio_uncompress(c, bio, data.b, *crc)) {
- bch_err(c, "error rewriting existing data: decompression error");
+ if (!c->opts.no_data_io)
+ bch_err(c, "error rewriting existing data: decompression error");
bio_unmap_or_unbounce(c, data);
return -EIO;
}
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c
index 8604df80a3e2..5bacc6a9dd8f 100644
--- a/fs/bcachefs/io.c
+++ b/fs/bcachefs/io.c
@@ -1082,7 +1082,8 @@ static enum prep_encoded_ret {
op->incompressible)) {
if (!crc_is_compressed(op->crc) &&
op->csum_type != op->crc.csum_type &&
- bch2_write_rechecksum(c, op, op->csum_type))
+ bch2_write_rechecksum(c, op, op->csum_type) &&
+ !c->opts.no_data_io)
return PREP_ENCODED_CHECKSUM_ERR;
return PREP_ENCODED_DO_WRITE;
@@ -1102,7 +1103,7 @@ static enum prep_encoded_ret {
csum = bch2_checksum_bio(c, op->crc.csum_type,
extent_nonce(op->version, op->crc),
bio);
- if (bch2_crc_cmp(op->crc.csum, csum))
+ if (bch2_crc_cmp(op->crc.csum, csum) && !c->opts.no_data_io)
return PREP_ENCODED_CHECKSUM_ERR;
if (bch2_bio_uncompress_inplace(c, bio, &op->crc))
@@ -1120,7 +1121,8 @@ static enum prep_encoded_ret {
*/
if ((op->crc.live_size != op->crc.uncompressed_size ||
op->crc.csum_type != op->csum_type) &&
- bch2_write_rechecksum(c, op, op->csum_type))
+ bch2_write_rechecksum(c, op, op->csum_type) &&
+ !c->opts.no_data_io)
return PREP_ENCODED_CHECKSUM_ERR;
/*
@@ -2416,7 +2418,8 @@ static void __bch2_read_endio(struct work_struct *work)
if (ret)
goto decrypt_err;
- if (bch2_bio_uncompress(c, src, dst, dst_iter, crc))
+ if (bch2_bio_uncompress(c, src, dst, dst_iter, crc) &&
+ !c->opts.no_data_io)
goto decompression_err;
} else {
/* don't need to decrypt the entire bio: */