summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-07-14 22:05:34 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-07-22 12:05:27 -0400
commitea4c82fac938c280d0f8d49c51a1fea5e0f21363 (patch)
tree511684cdccea27b491fb1ef81091b8133408d293
parent3d85f57d4cb0dcc94eeafb707a6e8fdaeef8b5a0 (diff)
bcachefs: bch2_run_recovery_pass() now prints errors
With this the individual recovery passes no longer have to prin errors, and we can eliminate some gotos. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/alloc_background.c13
-rw-r--r--fs/bcachefs/backpointers.c5
-rw-r--r--fs/bcachefs/btree_gc.c1
-rw-r--r--fs/bcachefs/disk_accounting.c10
-rw-r--r--fs/bcachefs/fsck.c34
-rw-r--r--fs/bcachefs/inode.c17
-rw-r--r--fs/bcachefs/logged_ops.c4
-rw-r--r--fs/bcachefs/lru.c1
-rw-r--r--fs/bcachefs/recovery_passes.c4
-rw-r--r--fs/bcachefs/snapshot.c11
-rw-r--r--fs/bcachefs/subvolume.c17
11 files changed, 29 insertions, 88 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index 58706dfcdfe0..4c1604fd80f9 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -609,7 +609,6 @@ iter_err:
BCH_TRANS_COMMIT_no_enospc,
bch2_btree_insert_trans(trans, BTREE_ID_bucket_gens, &g.k_i, 0));
- bch_err_fn(c, ret);
return ret;
}
@@ -678,7 +677,6 @@ int bch2_alloc_read(struct bch_fs *c)
}
bch2_dev_put(ca);
- bch_err_fn(c, ret);
return ret;
}
@@ -1619,14 +1617,14 @@ bkey_err:
ca = NULL;
if (ret < 0)
- goto err;
+ return ret;
ret = for_each_btree_key(trans, iter,
BTREE_ID_need_discard, POS_MIN,
BTREE_ITER_prefetch, k,
bch2_check_discard_freespace_key(trans, &iter));
if (ret)
- goto err;
+ return ret;
bch2_trans_iter_init(trans, &iter, BTREE_ID_freespace, POS_MIN,
BTREE_ITER_prefetch);
@@ -1653,15 +1651,14 @@ bkey_err:
}
bch2_trans_iter_exit(trans, &iter);
if (ret)
- goto err;
+ return ret;
ret = for_each_btree_key_commit(trans, iter,
BTREE_ID_bucket_gens, POS_MIN,
BTREE_ITER_prefetch, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
bch2_check_bucket_gens_key(trans, &iter, k));
-err:
- bch_err_fn(c, ret);
+
return ret;
}
@@ -1743,7 +1740,6 @@ int bch2_check_alloc_to_lru_refs(struct bch_fs *c)
bch2_check_stripe_to_lru_refs(trans);
bch2_bkey_buf_exit(&last_flushed, c);
- bch_err_fn(c, ret);
return ret;
}
@@ -2353,7 +2349,6 @@ int bch2_fs_freespace_init(struct bch_fs *c)
if (c->sb.features & BIT_ULL(BCH_FEATURE_small_image))
return 0;
-
/*
* We can crash during the device add path, so we need to check this on
* every mount:
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c
index 7bb9d0cab289..bd26ab3e6812 100644
--- a/fs/bcachefs/backpointers.c
+++ b/fs/bcachefs/backpointers.c
@@ -438,7 +438,6 @@ int bch2_check_btree_backpointers(struct bch_fs *c)
bch2_check_backpointer_has_valid_bucket(trans, k, &last_flushed));
bch2_bkey_buf_exit(&last_flushed, c);
- bch_err_fn(c, ret);
return ret;
}
@@ -1163,8 +1162,6 @@ int bch2_check_extents_to_backpointers(struct bch_fs *c)
err:
bch2_bkey_buf_exit(&s.last_flushed, c);
bch2_btree_cache_unpin(c);
-
- bch_err_fn(c, ret);
return ret;
}
@@ -1327,8 +1324,6 @@ int bch2_check_backpointers_to_extents(struct bch_fs *c)
}
bch2_btree_cache_unpin(c);
-
- bch_err_fn(c, ret);
return ret;
}
diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c
index 0804329601c1..34cb8a4324dc 100644
--- a/fs/bcachefs/btree_gc.c
+++ b/fs/bcachefs/btree_gc.c
@@ -1099,7 +1099,6 @@ out:
if (!ret && !test_bit(BCH_FS_errors_not_fixed, &c->flags))
bch2_sb_members_clean_deleted(c);
- bch_err_fn(c, ret);
return ret;
}
diff --git a/fs/bcachefs/disk_accounting.c b/fs/bcachefs/disk_accounting.c
index 2f74e68da699..219e37738aee 100644
--- a/fs/bcachefs/disk_accounting.c
+++ b/fs/bcachefs/disk_accounting.c
@@ -785,7 +785,7 @@ int bch2_accounting_read(struct bch_fs *c)
accounting_read_key(trans, k);
}));
if (ret)
- goto err;
+ return ret;
struct journal_keys *keys = &c->journal_keys;
struct journal_key *dst = keys->data;
@@ -824,7 +824,7 @@ int bch2_accounting_read(struct bch_fs *c)
ret = accounting_read_key(trans, k);
if (ret)
- goto err;
+ return ret;
}
*dst++ = *i;
@@ -863,7 +863,7 @@ int bch2_accounting_read(struct bch_fs *c)
}
if (ret)
- goto fsck_err;
+ return ret;
}
eytzinger0_sort(acc->k.data, acc->k.nr, sizeof(acc->k.data[0]),
@@ -904,9 +904,7 @@ int bch2_accounting_read(struct bch_fs *c)
}
}
}
-fsck_err:
-err:
- bch_err_fn(c, ret);
+
return ret;
}
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c
index f64155614f65..df0aa2522b18 100644
--- a/fs/bcachefs/fsck.c
+++ b/fs/bcachefs/fsck.c
@@ -1331,14 +1331,11 @@ int bch2_check_inodes(struct bch_fs *c)
CLASS(btree_trans, trans)(c);
CLASS(snapshots_seen, s)();
- int ret = for_each_btree_key_commit(trans, iter, BTREE_ID_inodes,
+ return for_each_btree_key_commit(trans, iter, BTREE_ID_inodes,
POS_MIN,
BTREE_ITER_prefetch|BTREE_ITER_all_snapshots, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_inode(trans, &iter, k, &snapshot_root, &s));
-
- bch_err_fn(c, ret);
- return ret;
}
static int find_oldest_inode_needs_reattach(struct btree_trans *trans,
@@ -1426,13 +1423,11 @@ fsck_err:
int bch2_check_unreachable_inodes(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_commit(trans, iter, BTREE_ID_inodes,
+ return for_each_btree_key_commit(trans, iter, BTREE_ID_inodes,
POS_MIN,
BTREE_ITER_prefetch|BTREE_ITER_all_snapshots, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_unreachable_inode(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
static inline bool btree_matches_i_mode(enum btree_id btree, unsigned mode)
@@ -2032,8 +2027,6 @@ int bch2_check_extents(struct bch_fs *c)
check_i_sectors_notnested(trans, &w);
bch2_disk_reservation_put(c, &res);
-
- bch_err_fn(c, ret);
return ret;
}
@@ -2052,7 +2045,6 @@ int bch2_check_indirect_extents(struct bch_fs *c)
}));
bch2_disk_reservation_put(c, &res);
- bch_err_fn(c, ret);
return ret;
}
@@ -2478,7 +2470,6 @@ again:
ret = -EINVAL;
}
- bch_err_fn(c, ret);
return ret;
}
@@ -2532,7 +2523,6 @@ int bch2_check_xattrs(struct bch_fs *c)
NULL, NULL,
BCH_TRANS_COMMIT_no_enospc,
check_xattr(trans, &iter, k, &hash_info, &inode));
- bch_err_fn(c, ret);
return ret;
}
@@ -2598,10 +2588,8 @@ fsck_err:
int bch2_check_root(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = commit_do(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
- check_root_trans(trans));
- bch_err_fn(c, ret);
- return ret;
+ return commit_do(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
+ check_root_trans(trans));
}
static int check_subvol_path(struct btree_trans *trans, struct btree_iter *iter, struct bkey_s_c k)
@@ -2676,12 +2664,10 @@ err:
int bch2_check_subvolume_structure(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_commit(trans, iter,
+ return for_each_btree_key_commit(trans, iter,
BTREE_ID_subvolumes, POS_MIN, BTREE_ITER_prefetch, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_subvol_path(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
static int bch2_bi_depth_renumber_one(struct btree_trans *trans,
@@ -2850,7 +2836,7 @@ fsck_err:
int bch2_check_directory_structure(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_reverse_commit(trans, iter, BTREE_ID_inodes, POS_MIN,
+ return for_each_btree_key_reverse_commit(trans, iter, BTREE_ID_inodes, POS_MIN,
BTREE_ITER_intent|
BTREE_ITER_prefetch|
BTREE_ITER_all_snapshots, k,
@@ -2863,9 +2849,6 @@ int bch2_check_directory_structure(struct bch_fs *c)
check_path_loop(trans, k);
}));
-
- bch_err_fn(c, ret);
- return ret;
}
struct nlink_table {
@@ -3115,7 +3098,6 @@ int bch2_check_nlinks(struct bch_fs *c)
} while (next_iter_range_start != U64_MAX);
kvfree(links.d);
- bch_err_fn(c, ret);
return ret;
}
@@ -3151,14 +3133,12 @@ int bch2_fix_reflink_p(struct bch_fs *c)
return 0;
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_commit(trans, iter,
+ return for_each_btree_key_commit(trans, iter,
BTREE_ID_extents, POS_MIN,
BTREE_ITER_intent|BTREE_ITER_prefetch|
BTREE_ITER_all_snapshots, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
fix_reflink_p_key(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
#ifndef NO_BCACHEFS_CHARDEV
diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c
index fd4a20ce06ff..4a9725f30c4f 100644
--- a/fs/bcachefs/inode.c
+++ b/fs/bcachefs/inode.c
@@ -1522,28 +1522,22 @@ static int may_delete_deleted_inum(struct btree_trans *trans, subvol_inum inum,
int bch2_delete_dead_inodes(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret;
-
/*
* if we ran check_inodes() unlinked inodes will have already been
* cleaned up but the write buffer will be out of sync; therefore we
* alway need a write buffer flush
- */
- ret = bch2_btree_write_buffer_flush_sync(trans);
- if (ret)
- goto err;
-
- /*
+ *
* Weird transaction restart handling here because on successful delete,
* bch2_inode_rm_snapshot() will return a nested transaction restart,
* but we can't retry because the btree write buffer won't have been
* flushed and we'd spin:
*/
- ret = for_each_btree_key_commit(trans, iter, BTREE_ID_deleted_inodes, POS_MIN,
+ return bch2_btree_write_buffer_flush_sync(trans) ?:
+ for_each_btree_key_commit(trans, iter, BTREE_ID_deleted_inodes, POS_MIN,
BTREE_ITER_prefetch|BTREE_ITER_all_snapshots, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc, ({
struct bch_inode_unpacked inode;
- ret = may_delete_deleted_inode(trans, k.k->p, &inode, true);
+ int ret = may_delete_deleted_inode(trans, k.k->p, &inode, true);
if (ret > 0) {
bch_verbose_ratelimited(c, "deleting unlinked inode %llu:%u",
k.k->p.offset, k.k->p.snapshot);
@@ -1564,7 +1558,4 @@ int bch2_delete_dead_inodes(struct bch_fs *c)
ret;
}));
-err:
- bch_err_fn(c, ret);
- return ret;
}
diff --git a/fs/bcachefs/logged_ops.c b/fs/bcachefs/logged_ops.c
index 3964f92a26b0..0367ea37e857 100644
--- a/fs/bcachefs/logged_ops.c
+++ b/fs/bcachefs/logged_ops.c
@@ -62,14 +62,12 @@ fsck_err:
int bch2_resume_logged_ops(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_max(trans, iter,
+ return for_each_btree_key_max(trans, iter,
BTREE_ID_logged_ops,
POS(LOGGED_OPS_INUM_logged_ops, 0),
POS(LOGGED_OPS_INUM_logged_ops, U64_MAX),
BTREE_ITER_prefetch, k,
resume_logged_op(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
static int __bch2_logged_op_start(struct btree_trans *trans, struct bkey_i *k)
diff --git a/fs/bcachefs/lru.c b/fs/bcachefs/lru.c
index c2c593356f41..ee14656c3fdd 100644
--- a/fs/bcachefs/lru.c
+++ b/fs/bcachefs/lru.c
@@ -214,7 +214,6 @@ int bch2_check_lrus(struct bch_fs *c)
bch2_check_lru_key(trans, &iter, k, &last_flushed));
bch2_bkey_buf_exit(&last_flushed, c);
- bch_err_fn(c, ret);
return ret;
}
diff --git a/fs/bcachefs/recovery_passes.c b/fs/bcachefs/recovery_passes.c
index a89508a87def..f9d1c4921392 100644
--- a/fs/bcachefs/recovery_passes.c
+++ b/fs/bcachefs/recovery_passes.c
@@ -246,11 +246,12 @@ static int bch2_lookup_root_inode(struct bch_fs *c)
struct recovery_pass_fn {
int (*fn)(struct bch_fs *);
+ const char *name;
unsigned when;
};
static struct recovery_pass_fn recovery_pass_fns[] = {
-#define x(_fn, _id, _when) { .fn = bch2_##_fn, .when = _when },
+#define x(_fn, _id, _when) { .fn = bch2_##_fn, .name = #_fn, .when = _when },
BCH_RECOVERY_PASSES()
#undef x
};
@@ -480,6 +481,7 @@ static int bch2_run_recovery_pass(struct bch_fs *c, enum bch_recovery_pass pass)
r->passes_to_run &= ~BIT_ULL(pass);
if (ret) {
+ bch_err(c, "%s(): error %s", p->name, bch2_err_str(ret));
r->passes_failing |= BIT_ULL(pass);
return ret;
}
diff --git a/fs/bcachefs/snapshot.c b/fs/bcachefs/snapshot.c
index 398a1a8bceab..7a801513b134 100644
--- a/fs/bcachefs/snapshot.c
+++ b/fs/bcachefs/snapshot.c
@@ -574,13 +574,11 @@ fsck_err:
int bch2_check_snapshot_trees(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_commit(trans, iter,
+ return for_each_btree_key_commit(trans, iter,
BTREE_ID_snapshot_trees, POS_MIN,
BTREE_ITER_prefetch, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_snapshot_tree(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
/*
@@ -842,13 +840,11 @@ int bch2_check_snapshots(struct bch_fs *c)
* the parent's depth already be correct:
*/
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_reverse_commit(trans, iter,
+ return for_each_btree_key_reverse_commit(trans, iter,
BTREE_ID_snapshots, POS_MAX,
BTREE_ITER_prefetch, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_snapshot(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
static int check_snapshot_exists(struct btree_trans *trans, u32 id)
@@ -1016,7 +1012,6 @@ int bch2_reconstruct_snapshots(struct bch_fs *c)
fsck_err:
err:
snapshot_tree_reconstruct_exit(&r);
- bch_err_fn(c, ret);
return ret;
}
@@ -1894,8 +1889,6 @@ err:
bch2_recovery_pass_set_no_ratelimit(c, BCH_RECOVERY_PASS_check_snapshots);
mutex_unlock(&d->lock);
- if (!bch2_err_matches(ret, EROFS))
- bch_err_fn(c, ret);
return ret;
}
diff --git a/fs/bcachefs/subvolume.c b/fs/bcachefs/subvolume.c
index dbd6bbfd972f..2d2d6b22df88 100644
--- a/fs/bcachefs/subvolume.c
+++ b/fs/bcachefs/subvolume.c
@@ -183,12 +183,10 @@ fsck_err:
int bch2_check_subvols(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_commit(trans, iter,
+ return for_each_btree_key_commit(trans, iter,
BTREE_ID_subvolumes, POS_MIN, BTREE_ITER_prefetch, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_subvol(trans, &iter, k));
- bch_err_fn(c, ret);
- return ret;
}
static int check_subvol_child(struct btree_trans *trans,
@@ -218,12 +216,10 @@ fsck_err:
int bch2_check_subvol_children(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = for_each_btree_key_commit(trans, iter,
+ return for_each_btree_key_commit(trans, iter,
BTREE_ID_subvolume_children, POS_MIN, BTREE_ITER_prefetch, k,
NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
check_subvol_child(trans, &iter, k));
- bch_err_fn(c, ret);
- return 0;
}
/* Subvolumes: */
@@ -679,7 +675,6 @@ int bch2_initialize_subvolumes(struct bch_fs *c)
struct bkey_i_snapshot_tree root_tree;
struct bkey_i_snapshot root_snapshot;
struct bkey_i_subvolume root_volume;
- int ret;
bkey_snapshot_tree_init(&root_tree.k_i);
root_tree.k.p.offset = 1;
@@ -700,11 +695,9 @@ int bch2_initialize_subvolumes(struct bch_fs *c)
root_volume.v.snapshot = cpu_to_le32(U32_MAX);
root_volume.v.inode = cpu_to_le64(BCACHEFS_ROOT_INO);
- ret = bch2_btree_insert(c, BTREE_ID_snapshot_trees, &root_tree.k_i, NULL, 0, 0) ?:
+ return bch2_btree_insert(c, BTREE_ID_snapshot_trees, &root_tree.k_i, NULL, 0, 0) ?:
bch2_btree_insert(c, BTREE_ID_snapshots, &root_snapshot.k_i, NULL, 0, 0) ?:
bch2_btree_insert(c, BTREE_ID_subvolumes, &root_volume.k_i, NULL, 0, 0);
- bch_err_fn(c, ret);
- return ret;
}
static int __bch2_fs_upgrade_for_subvolumes(struct btree_trans *trans)
@@ -742,10 +735,8 @@ err:
int bch2_fs_upgrade_for_subvolumes(struct bch_fs *c)
{
CLASS(btree_trans, trans)(c);
- int ret = commit_do(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
+ return commit_do(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc,
__bch2_fs_upgrade_for_subvolumes(trans));
- bch_err_fn(c, ret);
- return ret;
}
void bch2_fs_subvolumes_init_early(struct bch_fs *c)