Signed-off-by: Kent Overstreet <[email protected]>
---
fs/bcachefs/buckets.c | 16 +++-------------
fs/bcachefs/error.c | 14 ++++++++++----
fs/bcachefs/error.h | 4 +---
3 files changed, 14 insertions(+), 20 deletions(-)
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c
index cebd4d21f361..be71851baf3c 100644
--- a/fs/bcachefs/buckets.c
+++ b/fs/bcachefs/buckets.c
@@ -392,29 +392,23 @@ static int bucket_ref_update_err(struct btree_trans
*trans, struct printbuf *buf
struct bkey_s_c k, bool insert, enum
bch_sb_error_id id)
{
struct bch_fs *c = trans->c;
- bool repeat = false, print = true, suppress = false;
prt_printf(buf, "\nwhile marking ");
bch2_bkey_val_to_text(buf, c, k);
prt_newline(buf);
- __bch2_count_fsck_err(c, id, buf->buf, &repeat, &print, &suppress);
+ bool print = __bch2_count_fsck_err(c, id, buf);
int ret = bch2_run_explicit_recovery_pass_printbuf(c, buf,
BCH_RECOVERY_PASS_check_allocations);
if (insert) {
- print = true;
- suppress = false;
-
bch2_trans_updates_to_text(buf, trans);
__bch2_inconsistent_error(c, buf);
ret = -BCH_ERR_bucket_ref_update;
}
- if (suppress)
- prt_printf(buf, "Ratelimiting new instances of previous
error\n");
- if (print)
+ if (print || insert)
bch2_print_string_as_lines(KERN_ERR, buf->buf);
return ret;
}
@@ -969,15 +963,11 @@ static int __bch2_trans_mark_metadata_bucket(struct
btree_trans *trans,
bch2_data_type_str(type),
bch2_data_type_str(type));
- bool repeat = false, print = true, suppress = false;
- bch2_count_fsck_err(c, bucket_metadata_type_mismatch, buf.buf,
- &repeat, &print, &suppress);
+ bool print = bch2_count_fsck_err(c,
bucket_metadata_type_mismatch, &buf);
bch2_run_explicit_recovery_pass_printbuf(c, &buf,
BCH_RECOVERY_PASS_check_allocations);
- if (suppress)
- prt_printf(&buf, "Ratelimiting new instances of
previous error\n");
if (print)
bch2_print_string_as_lines(KERN_ERR, buf.buf);
printbuf_exit(&buf);
diff --git a/fs/bcachefs/error.c b/fs/bcachefs/error.c
index c3385bc0d1ef..5ea72cb7fe7e 100644
--- a/fs/bcachefs/error.c
+++ b/fs/bcachefs/error.c
@@ -379,15 +379,21 @@ static struct fsck_err_state
*count_fsck_err_locked(struct bch_fs *c,
return s;
}
-void __bch2_count_fsck_err(struct bch_fs *c,
- enum bch_sb_error_id id, const char *msg,
- bool *repeat, bool *print, bool *suppress)
+bool __bch2_count_fsck_err(struct bch_fs *c,
+ enum bch_sb_error_id id, struct printbuf *msg)
{
bch2_sb_error_count(c, id);
mutex_lock(&c->fsck_error_msgs_lock);
- count_fsck_err_locked(c, id, msg, repeat, print, suppress);
+ bool print = true, repeat = false, suppress = false;
+
+ count_fsck_err_locked(c, id, msg->buf, &repeat, &print, &suppress);
mutex_unlock(&c->fsck_error_msgs_lock);
+
+ if (suppress)
+ prt_printf(msg, "Ratelimiting new instances of previous
error\n");
+
+ return print && !repeat;
}
int __bch2_fsck_err(struct bch_fs *c,
diff --git a/fs/bcachefs/error.h b/fs/bcachefs/error.h
index d0d024dc714b..da653e4ec8fa 100644
--- a/fs/bcachefs/error.h
+++ b/fs/bcachefs/error.h
@@ -76,9 +76,7 @@ struct fsck_err_state {
#define fsck_err_count(_c, _err) bch2_sb_err_count(_c,
BCH_FSCK_ERR_##_err)
-void __bch2_count_fsck_err(struct bch_fs *,
- enum bch_sb_error_id, const char *,
- bool *, bool *, bool *);
+bool __bch2_count_fsck_err(struct bch_fs *, enum bch_sb_error_id, struct
printbuf *);
#define bch2_count_fsck_err(_c, _err, ...) \
__bch2_count_fsck_err(_c, BCH_FSCK_ERR_##_err, __VA_ARGS__)
--
2.49.0