Signed-off-by: Kent Overstreet <kent.overstr...@linux.dev>
---
 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


Reply via email to