]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: Better printing of inconsistency errors
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 26 Mar 2025 14:41:33 +0000 (10:41 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 29 Mar 2025 17:26:13 +0000 (13:26 -0400)
Build up and emit the error message for an inconsistency error all at
once, instead of spread over multiple printk calls, so they're not
jumbled in the dmesg log.

Also, add better indenting.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c
fs/bcachefs/btree_io.c
fs/bcachefs/btree_iter.c
fs/bcachefs/btree_iter.h
fs/bcachefs/btree_node_scan.c
fs/bcachefs/btree_update_interior.c
fs/bcachefs/buckets.c
fs/bcachefs/error.c
fs/bcachefs/error.h
fs/bcachefs/sb-errors_format.h

index 4da67ba8b7aba5751a84e217b7c5882ebdc9aef7..21d1d86d5008d29b5398d4ac16f0c724fd98c428 100644 (file)
@@ -96,6 +96,7 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
 {
        struct bch_fs *c = trans->c;
        struct printbuf buf = PRINTBUF;
+       int ret = 0;
 
        if (insert) {
                prt_printf(&buf, "existing backpointer found when inserting ");
@@ -125,17 +126,15 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
 
                prt_printf(&buf, "for ");
                bch2_bkey_val_to_text(&buf, c, orig_k);
-
-               bch_err(c, "%s", buf.buf);
        }
 
-       printbuf_exit(&buf);
+       if (c->curr_recovery_pass > BCH_RECOVERY_PASS_check_extents_to_backpointers &&
+           __bch2_inconsistent_error(c, &buf))
+               ret = -BCH_ERR_erofs_unfixed_errors;
 
-       if (c->curr_recovery_pass > BCH_RECOVERY_PASS_check_extents_to_backpointers) {
-               return bch2_inconsistent_error(c) ? BCH_ERR_erofs_unfixed_errors : 0;
-       } else {
-               return 0;
-       }
+       bch_err(c, "%s", buf.buf);
+       printbuf_exit(&buf);
+       return ret;
 }
 
 int bch2_bucket_backpointer_mod_nowritebuffer(struct btree_trans *trans,
index c3224a9207582dc17e02af5afb9aa81f248bb518..1d94a2bf706de9477151d29de62bf20a4e39ec56 100644 (file)
@@ -548,32 +548,39 @@ static int __btree_err(int ret,
                       enum bch_sb_error_id err_type,
                       const char *fmt, ...)
 {
-       struct printbuf out = PRINTBUF;
        bool silent = c->curr_recovery_pass == BCH_RECOVERY_PASS_scan_for_btree_nodes;
-       va_list args;
+
+       if (!have_retry && ret == -BCH_ERR_btree_node_read_err_want_retry)
+               ret = -BCH_ERR_btree_node_read_err_fixable;
+       if (!have_retry && ret == -BCH_ERR_btree_node_read_err_must_retry)
+               ret = -BCH_ERR_btree_node_read_err_bad_node;
+
+       if (!silent && ret != -BCH_ERR_btree_node_read_err_fixable)
+               bch2_sb_error_count(c, err_type);
+
+       struct printbuf out = PRINTBUF;
+       if (write != WRITE && ret != -BCH_ERR_btree_node_read_err_fixable) {
+               printbuf_indent_add_nextline(&out, 2);
+#ifdef BCACHEFS_LOG_PREFIX
+               prt_printf(&out, bch2_log_msg(c, ""));
+#endif
+       }
 
        btree_err_msg(&out, c, ca, b, i, k, b->written, write);
 
+       va_list args;
        va_start(args, fmt);
        prt_vprintf(&out, fmt, args);
        va_end(args);
 
        if (write == WRITE) {
-               bch2_print_string_as_lines(KERN_ERR, out.buf);
-               ret = c->opts.errors == BCH_ON_ERROR_continue
-                       ? 0
-                       : -BCH_ERR_fsck_errors_not_fixed;
-               goto out;
+               prt_str(&out, ", ");
+               ret = __bch2_inconsistent_error(c, &out)
+                       ? -BCH_ERR_fsck_errors_not_fixed
+                       : 0;
+               silent = false;
        }
 
-       if (!have_retry && ret == -BCH_ERR_btree_node_read_err_want_retry)
-               ret = -BCH_ERR_btree_node_read_err_fixable;
-       if (!have_retry && ret == -BCH_ERR_btree_node_read_err_must_retry)
-               ret = -BCH_ERR_btree_node_read_err_bad_node;
-
-       if (!silent && ret != -BCH_ERR_btree_node_read_err_fixable)
-               bch2_sb_error_count(c, err_type);
-
        switch (ret) {
        case -BCH_ERR_btree_node_read_err_fixable:
                ret = !silent
@@ -583,25 +590,21 @@ static int __btree_err(int ret,
                    ret != -BCH_ERR_fsck_ignore)
                        goto fsck_err;
                ret = -BCH_ERR_fsck_fix;
-               break;
-       case -BCH_ERR_btree_node_read_err_want_retry:
-       case -BCH_ERR_btree_node_read_err_must_retry:
-               if (!silent)
-                       bch2_print_string_as_lines(KERN_ERR, out.buf);
-               break;
+               goto out;
        case -BCH_ERR_btree_node_read_err_bad_node:
-               if (!silent)
-                       bch2_print_string_as_lines(KERN_ERR, out.buf);
-               ret = bch2_topology_error(c);
+               prt_str(&out, ", ");
+               ret = __bch2_topology_error(c, &out);
+               if (ret)
+                       silent = false;
                break;
        case -BCH_ERR_btree_node_read_err_incompatible:
-               if (!silent)
-                       bch2_print_string_as_lines(KERN_ERR, out.buf);
                ret = -BCH_ERR_fsck_errors_not_fixed;
+               silent = false;
                break;
-       default:
-               BUG();
        }
+
+       if (!silent)
+               bch2_print_string_as_lines(KERN_ERR, out.buf);
 out:
 fsck_err:
        printbuf_exit(&out);
index 1a1e8e61535eaa175e1804202c3dd31fbfbe624b..a9c110b846b512e19ff3f510662a78d5fe3f6460 100644 (file)
@@ -1495,16 +1495,6 @@ void bch2_trans_updates_to_text(struct printbuf *buf, struct btree_trans *trans)
        printbuf_indent_sub(buf, 2);
 }
 
-noinline __cold
-void bch2_dump_trans_updates(struct btree_trans *trans)
-{
-       struct printbuf buf = PRINTBUF;
-
-       bch2_trans_updates_to_text(&buf, trans);
-       bch2_print_str(trans->c, buf.buf);
-       printbuf_exit(&buf);
-}
-
 static void bch2_btree_path_to_text_short(struct printbuf *out, struct btree_trans *trans, btree_path_idx_t path_idx)
 {
        struct btree_path *path = trans->paths + path_idx;
index 8823eec6b284e38b9f1f9395e2b51208dd3e9a29..e6f51a3b8187a62d64d7a43ab21cc53a45297a6c 100644 (file)
@@ -9,7 +9,6 @@
 void bch2_trans_updates_to_text(struct printbuf *, struct btree_trans *);
 void bch2_btree_path_to_text(struct printbuf *, struct btree_trans *, btree_path_idx_t);
 void bch2_trans_paths_to_text(struct printbuf *, struct btree_trans *);
-void bch2_dump_trans_updates(struct btree_trans *);
 void bch2_dump_trans_paths_updates(struct btree_trans *);
 
 static inline int __bkey_err(const struct bkey *k)
index de02c0e378c9c6bdfc7ec10a1c8b0db71fc08c28..25d54b77cdc2498c0bea53ff765594f8f4c15540 100644 (file)
@@ -579,10 +579,12 @@ int bch2_get_scanned_nodes(struct bch_fs *c, enum btree_id btree,
 
                found_btree_node_to_key(&tmp.k, &n);
 
-               struct printbuf buf = PRINTBUF;
-               bch2_bkey_val_to_text(&buf, c, bkey_i_to_s_c(&tmp.k));
-               bch_verbose(c, "%s(): recovering %s", __func__, buf.buf);
-               printbuf_exit(&buf);
+               if (c->opts.verbose) {
+                       struct printbuf buf = PRINTBUF;
+                       bch2_bkey_val_to_text(&buf, c, bkey_i_to_s_c(&tmp.k));
+                       bch_verbose(c, "%s(): recovering %s", __func__, buf.buf);
+                       printbuf_exit(&buf);
+               }
 
                BUG_ON(bch2_bkey_validate(c, bkey_i_to_s_c(&tmp.k),
                                          (struct bkey_validate_context) {
index 4c6ade8c10a2172d214a11566daf355d403299b7..37c4ba529e3ab282c9136abec8e8b3f1ae06cd95 100644 (file)
@@ -54,6 +54,8 @@ int bch2_btree_node_check_topology(struct btree_trans *trans, struct btree *b)
        struct bkey_buf prev;
        int ret = 0;
 
+       printbuf_indent_add_nextline(&buf, 2);
+
        BUG_ON(b->key.k.type == KEY_TYPE_btree_ptr_v2 &&
               !bpos_eq(bkey_i_to_btree_ptr_v2(&b->key)->v.min_key,
                        b->data->min_key));
@@ -64,19 +66,20 @@ int bch2_btree_node_check_topology(struct btree_trans *trans, struct btree *b)
 
        if (b == btree_node_root(c, b)) {
                if (!bpos_eq(b->data->min_key, POS_MIN)) {
-                       printbuf_reset(&buf);
+                       ret = __bch2_topology_error(c, &buf);
+
                        bch2_bpos_to_text(&buf, b->data->min_key);
                        log_fsck_err(trans, btree_root_bad_min_key,
                                      "btree root with incorrect min_key: %s", buf.buf);
-                       goto topology_repair;
+                       goto out;
                }
 
                if (!bpos_eq(b->data->max_key, SPOS_MAX)) {
-                       printbuf_reset(&buf);
+                       ret = __bch2_topology_error(c, &buf);
                        bch2_bpos_to_text(&buf, b->data->max_key);
                        log_fsck_err(trans, btree_root_bad_max_key,
                                      "btree root with incorrect max_key: %s", buf.buf);
-                       goto topology_repair;
+                       goto out;
                }
        }
 
@@ -94,9 +97,8 @@ int bch2_btree_node_check_topology(struct btree_trans *trans, struct btree *b)
                        : bpos_successor(prev.k->k.p);
 
                if (!bpos_eq(expected_min, bp.v->min_key)) {
-                       bch2_topology_error(c);
+                       ret = __bch2_topology_error(c, &buf);
 
-                       printbuf_reset(&buf);
                        prt_str(&buf, "end of prev node doesn't match start of next node\nin ");
                        bch2_btree_id_level_to_text(&buf, b->c.btree_id, b->c.level);
                        prt_str(&buf, " node ");
@@ -107,7 +109,7 @@ int bch2_btree_node_check_topology(struct btree_trans *trans, struct btree *b)
                        bch2_bkey_val_to_text(&buf, c, k);
 
                        log_fsck_err(trans, btree_node_topology_bad_min_key, "%s", buf.buf);
-                       goto topology_repair;
+                       goto out;
                }
 
                bch2_bkey_buf_reassemble(&prev, c, k);
@@ -115,20 +117,17 @@ int bch2_btree_node_check_topology(struct btree_trans *trans, struct btree *b)
        }
 
        if (bkey_deleted(&prev.k->k)) {
-               bch2_topology_error(c);
+               ret = __bch2_topology_error(c, &buf);
 
-               printbuf_reset(&buf);
                prt_str(&buf, "empty interior node\nin ");
                bch2_btree_id_level_to_text(&buf, b->c.btree_id, b->c.level);
                prt_str(&buf, " node ");
                bch2_bkey_val_to_text(&buf, c, bkey_i_to_s_c(&b->key));
 
                log_fsck_err(trans, btree_node_topology_empty_interior_node, "%s", buf.buf);
-               goto topology_repair;
        } else if (!bpos_eq(prev.k->k.p, b->key.k.p)) {
-               bch2_topology_error(c);
+               ret = __bch2_topology_error(c, &buf);
 
-               printbuf_reset(&buf);
                prt_str(&buf, "last child node doesn't end at end of parent node\nin ");
                bch2_btree_id_level_to_text(&buf, b->c.btree_id, b->c.level);
                prt_str(&buf, " node ");
@@ -137,7 +136,6 @@ int bch2_btree_node_check_topology(struct btree_trans *trans, struct btree *b)
                bch2_bkey_val_to_text(&buf, c, bkey_i_to_s_c(prev.k));
 
                log_fsck_err(trans, btree_node_topology_bad_max_key, "%s", buf.buf);
-               goto topology_repair;
        }
 out:
 fsck_err:
@@ -145,9 +143,6 @@ fsck_err:
        bch2_bkey_buf_exit(&prev, c);
        printbuf_exit(&buf);
        return ret;
-topology_repair:
-       ret = bch2_topology_error(c);
-       goto out;
 }
 
 /* Calculate ideal packed bkey format for new btree nodes: */
@@ -2007,18 +2002,22 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans,
        }
 
        if (!bpos_eq(bpos_successor(prev->data->max_key), next->data->min_key)) {
-               struct printbuf buf1 = PRINTBUF, buf2 = PRINTBUF;
-
-               bch2_bpos_to_text(&buf1, prev->data->max_key);
-               bch2_bpos_to_text(&buf2, next->data->min_key);
-               bch_err(c,
-                       "%s(): btree topology error:\n"
-                       "  prev ends at   %s\n"
-                       "  next starts at %s",
-                       __func__, buf1.buf, buf2.buf);
-               printbuf_exit(&buf1);
-               printbuf_exit(&buf2);
-               ret = bch2_topology_error(c);
+               struct printbuf buf = PRINTBUF;
+
+               printbuf_indent_add_nextline(&buf, 2);
+               prt_printf(&buf, "%s(): ", __func__);
+               ret = __bch2_topology_error(c, &buf);
+               prt_newline(&buf);
+
+               prt_printf(&buf, "prev ends at   ");
+               bch2_bpos_to_text(&buf, prev->data->max_key);
+               prt_newline(&buf);
+
+               prt_printf(&buf, "next starts at ");
+               bch2_bpos_to_text(&buf, next->data->min_key);
+
+               bch_err(c, "%s", buf.buf);
+               printbuf_exit(&buf);
                goto err;
        }
 
index e56ef623ebc15664dc0956ca7b2e69aaf3f24ee2..1c6fc45e1449eb7410ecbefe7fc580235550f180 100644 (file)
@@ -381,6 +381,36 @@ err:
        return ret;
 }
 
+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);
+
+       int ret = bch2_run_explicit_recovery_pass(c, 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)
+               bch2_print_string_as_lines(KERN_ERR, buf->buf);
+       return ret;
+}
+
 int bch2_bucket_ref_update(struct btree_trans *trans, struct bch_dev *ca,
                           struct bkey_s_c k,
                           const struct bch_extent_ptr *ptr,
@@ -396,32 +426,29 @@ int bch2_bucket_ref_update(struct btree_trans *trans, struct bch_dev *ca,
 
        BUG_ON(!sectors);
 
-       if (gen_after(ptr->gen, b_gen)) {
-               bch2_run_explicit_recovery_pass(c, BCH_RECOVERY_PASS_check_allocations);
-               log_fsck_err(trans, ptr_gen_newer_than_bucket_gen,
-                       "bucket %u:%zu gen %u data type %s: ptr gen %u newer than bucket gen\n"
-                       "while marking %s",
+       if (unlikely(gen_after(ptr->gen, b_gen))) {
+               bch2_log_msg_start(c, &buf);
+               prt_printf(&buf,
+                       "bucket %u:%zu gen %u data type %s: ptr gen %u newer than bucket gen",
                        ptr->dev, bucket_nr, b_gen,
                        bch2_data_type_str(bucket_data_type ?: ptr_data_type),
-                       ptr->gen,
-                       (bch2_bkey_val_to_text(&buf, c, k), buf.buf));
-               if (inserting)
-                       goto err;
+                       ptr->gen);
+
+               ret = bucket_ref_update_err(trans, &buf, k, inserting,
+                                           BCH_FSCK_ERR_ptr_gen_newer_than_bucket_gen);
                goto out;
        }
 
-       if (gen_cmp(b_gen, ptr->gen) > BUCKET_GC_GEN_MAX) {
-               bch2_run_explicit_recovery_pass(c, BCH_RECOVERY_PASS_check_allocations);
-               log_fsck_err(trans, ptr_too_stale,
-                       "bucket %u:%zu gen %u data type %s: ptr gen %u too stale\n"
-                       "while marking %s",
+       if (unlikely(gen_cmp(b_gen, ptr->gen) > BUCKET_GC_GEN_MAX)) {
+               bch2_log_msg_start(c, &buf);
+               prt_printf(&buf,
+                       "bucket %u:%zu gen %u data type %s: ptr gen %u too stale",
                        ptr->dev, bucket_nr, b_gen,
                        bch2_data_type_str(bucket_data_type ?: ptr_data_type),
-                       ptr->gen,
-                       (printbuf_reset(&buf),
-                        bch2_bkey_val_to_text(&buf, c, k), buf.buf));
-               if (inserting)
-                       goto err;
+                       ptr->gen);
+
+               ret = bucket_ref_update_err(trans, &buf, k, inserting,
+                                           BCH_FSCK_ERR_ptr_too_stale);
                goto out;
        }
 
@@ -430,62 +457,50 @@ int bch2_bucket_ref_update(struct btree_trans *trans, struct bch_dev *ca,
                goto out;
        }
 
-       if (b_gen != ptr->gen) {
-               bch2_run_explicit_recovery_pass(c, BCH_RECOVERY_PASS_check_allocations);
-               log_fsck_err(trans, stale_dirty_ptr,
-                       "bucket %u:%zu gen %u (mem gen %u) data type %s: stale dirty ptr (gen %u)\n"
-                       "while marking %s",
+       if (unlikely(b_gen != ptr->gen)) {
+               bch2_log_msg_start(c, &buf);
+               prt_printf(&buf,
+                       "bucket %u:%zu gen %u (mem gen %u) data type %s: stale dirty ptr (gen %u)",
                        ptr->dev, bucket_nr, b_gen,
                        bucket_gen_get(ca, bucket_nr),
                        bch2_data_type_str(bucket_data_type ?: ptr_data_type),
-                       ptr->gen,
-                       (printbuf_reset(&buf),
-                        bch2_bkey_val_to_text(&buf, c, k), buf.buf));
-               if (inserting)
-                       goto err;
+                       ptr->gen);
+
+               ret = bucket_ref_update_err(trans, &buf, k, inserting,
+                                           BCH_FSCK_ERR_stale_dirty_ptr);
                goto out;
        }
 
-       if (bucket_data_type_mismatch(bucket_data_type, ptr_data_type)) {
-               bch2_run_explicit_recovery_pass(c, BCH_RECOVERY_PASS_check_allocations);
-               log_fsck_err(trans, ptr_bucket_data_type_mismatch,
-                       "bucket %u:%zu gen %u different types of data in same bucket: %s, %s\n"
-                       "while marking %s",
-                       ptr->dev, bucket_nr, b_gen,
-                       bch2_data_type_str(bucket_data_type),
-                       bch2_data_type_str(ptr_data_type),
-                       (printbuf_reset(&buf),
-                        bch2_bkey_val_to_text(&buf, c, k), buf.buf));
-               if (inserting)
-                       goto err;
+       if (unlikely(bucket_data_type_mismatch(bucket_data_type, ptr_data_type))) {
+               bch2_log_msg_start(c, &buf);
+               prt_printf(&buf, "bucket %u:%zu gen %u different types of data in same bucket: %s, %s",
+                          ptr->dev, bucket_nr, b_gen,
+                          bch2_data_type_str(bucket_data_type),
+                          bch2_data_type_str(ptr_data_type));
+
+               ret = bucket_ref_update_err(trans, &buf, k, inserting,
+                                           BCH_FSCK_ERR_ptr_bucket_data_type_mismatch);
                goto out;
        }
 
-       if ((u64) *bucket_sectors + sectors > U32_MAX) {
-               bch2_run_explicit_recovery_pass(c, BCH_RECOVERY_PASS_check_allocations);
-               log_fsck_err(trans, bucket_sector_count_overflow,
-                       "bucket %u:%zu gen %u data type %s sector count overflow: %u + %lli > U32_MAX\n"
-                       "while marking %s",
+       if (unlikely((u64) *bucket_sectors + sectors > U32_MAX)) {
+               bch2_log_msg_start(c, &buf);
+               prt_printf(&buf,
+                       "bucket %u:%zu gen %u data type %s sector count overflow: %u + %lli > U32_MAX",
                        ptr->dev, bucket_nr, b_gen,
                        bch2_data_type_str(bucket_data_type ?: ptr_data_type),
-                       *bucket_sectors, sectors,
-                       (printbuf_reset(&buf),
-                        bch2_bkey_val_to_text(&buf, c, k), buf.buf));
-               if (inserting)
-                       goto err;
+                       *bucket_sectors, sectors);
+
+               ret = bucket_ref_update_err(trans, &buf, k, inserting,
+                                           BCH_FSCK_ERR_bucket_sector_count_overflow);
                sectors = -*bucket_sectors;
+               goto out;
        }
 
        *bucket_sectors += sectors;
 out:
        printbuf_exit(&buf);
        return ret;
-err:
-fsck_err:
-       bch2_dump_trans_updates(trans);
-       bch2_inconsistent_error(c);
-       ret = -BCH_ERR_bucket_ref_update;
-       goto out;
 }
 
 void bch2_trans_account_disk_usage_change(struct btree_trans *trans)
@@ -677,11 +692,13 @@ err:
                if (!m || !m->alive) {
                        gc_stripe_unlock(m);
                        struct printbuf buf = PRINTBUF;
+                       bch2_log_msg_start(c, &buf);
+                       prt_printf(&buf, "pointer to nonexistent stripe %llu\n  while marking ",
+                                  (u64) p.ec.idx);
                        bch2_bkey_val_to_text(&buf, c, k);
-                       bch_err_ratelimited(c, "pointer to nonexistent stripe %llu\n  while marking %s",
-                                           (u64) p.ec.idx, buf.buf);
+                       __bch2_inconsistent_error(c, &buf);
+                       bch2_print_string_as_lines(KERN_ERR, buf.buf);
                        printbuf_exit(&buf);
-                       bch2_inconsistent_error(c);
                        return -BCH_ERR_trigger_stripe_pointer;
                }
 
index db0f0fb547e5e2ae4ef2a00baf9ffcd31d8d5c45..d4dfd13a8076ff6676cd9cf96003d316a05bc8d2 100644 (file)
@@ -92,11 +92,13 @@ bool bch2_trans_inconsistent(struct btree_trans *trans, const char *fmt, ...)
        return ret;
 }
 
-int bch2_topology_error(struct bch_fs *c)
+int __bch2_topology_error(struct bch_fs *c, struct printbuf *out)
 {
+       prt_printf(out, "btree topology error: ");
+
        set_bit(BCH_FS_topology_error, &c->flags);
        if (!test_bit(BCH_FS_recovery_running, &c->flags)) {
-               bch2_inconsistent_error(c);
+               __bch2_inconsistent_error(c, out);
                return -BCH_ERR_btree_need_topology_repair;
        } else {
                return bch2_run_explicit_recovery_pass(c, BCH_RECOVERY_PASS_check_topology) ?:
@@ -104,13 +106,6 @@ int bch2_topology_error(struct bch_fs *c)
        }
 }
 
-int __bch2_topology_error(struct bch_fs *c, struct printbuf *out)
-{
-       prt_printf(out, "btree topology error: ");
-
-       return bch2_topology_error(c);
-}
-
 int bch2_fs_topology_error(struct bch_fs *c, const char *fmt, ...)
 {
        struct printbuf buf = PRINTBUF;
index 542bdbb8d8beae2e05e170cd5028e82679bb41b8..d0d024dc714b11c86bae671d9516757c59e06d40 100644 (file)
@@ -55,7 +55,6 @@ bool bch2_trans_inconsistent(struct btree_trans *, const char *, ...);
        _ret;                                                           \
 })
 
-int bch2_topology_error(struct bch_fs *);
 int __bch2_topology_error(struct bch_fs *, struct printbuf *);
 __printf(2, 3)
 int bch2_fs_topology_error(struct bch_fs *, const char *, ...);
index 1736abea9ed1c20716c9868ec8f427e12fbe0a81..5d43e3504386ad29c87fc68d49dbecbb48ba43b2 100644 (file)
@@ -5,8 +5,7 @@
 enum bch_fsck_flags {
        FSCK_CAN_FIX            = 1 << 0,
        FSCK_CAN_IGNORE         = 1 << 1,
-       FSCK_NO_RATELIMIT       = 1 << 2,
-       FSCK_AUTOFIX            = 1 << 3,
+       FSCK_AUTOFIX            = 1 << 2,
 };
 
 #define BCH_SB_ERRS()                                                                  \