Commit 074cbcda authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: fsck_err()s don't need to manually check c->sb.version anymore

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 15eaaa4c
...@@ -1232,9 +1232,6 @@ int bch2_check_alloc_hole_bucket_gens(struct btree_trans *trans, ...@@ -1232,9 +1232,6 @@ int bch2_check_alloc_hole_bucket_gens(struct btree_trans *trans,
unsigned i, gens_offset, gens_end_offset; unsigned i, gens_offset, gens_end_offset;
int ret; int ret;
if (c->sb.version < bcachefs_metadata_version_bucket_gens)
return 0;
bch2_btree_iter_set_pos(bucket_gens_iter, alloc_gens_pos(start, &gens_offset)); bch2_btree_iter_set_pos(bucket_gens_iter, alloc_gens_pos(start, &gens_offset));
k = bch2_btree_iter_peek_slot(bucket_gens_iter); k = bch2_btree_iter_peek_slot(bucket_gens_iter);
......
...@@ -467,8 +467,7 @@ static int check_bp_exists(struct btree_trans *trans, ...@@ -467,8 +467,7 @@ static int check_bp_exists(struct btree_trans *trans,
prt_printf(&buf, "\nbp pos "); prt_printf(&buf, "\nbp pos ");
bch2_bpos_to_text(&buf, bp_iter.pos); bch2_bpos_to_text(&buf, bp_iter.pos);
if (c->sb.version_upgrade_complete < bcachefs_metadata_version_backpointers || if (c->opts.reconstruct_alloc ||
c->opts.reconstruct_alloc ||
fsck_err(c, ptr_to_missing_backpointer, "%s", buf.buf)) fsck_err(c, ptr_to_missing_backpointer, "%s", buf.buf))
ret = bch2_bucket_backpointer_mod(trans, bucket, bp, orig_k, true); ret = bch2_bucket_backpointer_mod(trans, bucket, bp, orig_k, true);
......
...@@ -166,10 +166,8 @@ int bch2_create_trans(struct btree_trans *trans, ...@@ -166,10 +166,8 @@ int bch2_create_trans(struct btree_trans *trans,
if (ret) if (ret)
goto err; goto err;
if (c->sb.version >= bcachefs_metadata_version_inode_backpointers) { new_inode->bi_dir = dir_u->bi_inum;
new_inode->bi_dir = dir_u->bi_inum; new_inode->bi_dir_offset = dir_offset;
new_inode->bi_dir_offset = dir_offset;
}
} }
inode_iter.flags &= ~BTREE_ITER_ALL_SNAPSHOTS; inode_iter.flags &= ~BTREE_ITER_ALL_SNAPSHOTS;
...@@ -228,10 +226,8 @@ int bch2_link_trans(struct btree_trans *trans, ...@@ -228,10 +226,8 @@ int bch2_link_trans(struct btree_trans *trans,
if (ret) if (ret)
goto err; goto err;
if (c->sb.version >= bcachefs_metadata_version_inode_backpointers) { inode_u->bi_dir = dir.inum;
inode_u->bi_dir = dir.inum; inode_u->bi_dir_offset = dir_offset;
inode_u->bi_dir_offset = dir_offset;
}
ret = bch2_inode_write(trans, &dir_iter, dir_u) ?: ret = bch2_inode_write(trans, &dir_iter, dir_u) ?:
bch2_inode_write(trans, &inode_iter, inode_u); bch2_inode_write(trans, &inode_iter, inode_u);
...@@ -414,21 +410,19 @@ int bch2_rename_trans(struct btree_trans *trans, ...@@ -414,21 +410,19 @@ int bch2_rename_trans(struct btree_trans *trans,
goto err; goto err;
} }
if (c->sb.version >= bcachefs_metadata_version_inode_backpointers) { src_inode_u->bi_dir = dst_dir_u->bi_inum;
src_inode_u->bi_dir = dst_dir_u->bi_inum; src_inode_u->bi_dir_offset = dst_offset;
src_inode_u->bi_dir_offset = dst_offset;
if (mode == BCH_RENAME_EXCHANGE) { if (mode == BCH_RENAME_EXCHANGE) {
dst_inode_u->bi_dir = src_dir_u->bi_inum; dst_inode_u->bi_dir = src_dir_u->bi_inum;
dst_inode_u->bi_dir_offset = src_offset; dst_inode_u->bi_dir_offset = src_offset;
} }
if (mode == BCH_RENAME_OVERWRITE && if (mode == BCH_RENAME_OVERWRITE &&
dst_inode_u->bi_dir == dst_dir_u->bi_inum && dst_inode_u->bi_dir == dst_dir_u->bi_inum &&
dst_inode_u->bi_dir_offset == src_offset) { dst_inode_u->bi_dir_offset == src_offset) {
dst_inode_u->bi_dir = 0; dst_inode_u->bi_dir = 0;
dst_inode_u->bi_dir_offset = 0; dst_inode_u->bi_dir_offset = 0;
}
} }
if (mode == BCH_RENAME_OVERWRITE) { if (mode == BCH_RENAME_OVERWRITE) {
......
...@@ -870,8 +870,7 @@ static int check_inode(struct btree_trans *trans, ...@@ -870,8 +870,7 @@ static int check_inode(struct btree_trans *trans,
return 0; return 0;
} }
if (u.bi_flags & BCH_INODE_unlinked && if (u.bi_flags & BCH_INODE_unlinked) {
c->sb.version >= bcachefs_metadata_version_deleted_inodes) {
ret = check_inode_deleted_list(trans, k.k->p); ret = check_inode_deleted_list(trans, k.k->p);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -1594,13 +1593,12 @@ static int check_dirent_target(struct btree_trans *trans, ...@@ -1594,13 +1593,12 @@ static int check_dirent_target(struct btree_trans *trans,
d = dirent_i_to_s_c(n); d = dirent_i_to_s_c(n);
} }
if (d.v->d_type == DT_SUBVOL && if (fsck_err_on(d.v->d_type == DT_SUBVOL &&
target->bi_parent_subvol != le32_to_cpu(d.v->d_parent_subvol) && target->bi_parent_subvol != le32_to_cpu(d.v->d_parent_subvol),
(c->sb.version < bcachefs_metadata_version_subvol_dirent || c, dirent_d_parent_subvol_wrong,
fsck_err(c, dirent_d_parent_subvol_wrong, "dirent has wrong d_parent_subvol field: got %u, should be %u",
"dirent has wrong d_parent_subvol field: got %u, should be %u", le32_to_cpu(d.v->d_parent_subvol),
le32_to_cpu(d.v->d_parent_subvol), target->bi_parent_subvol)) {
target->bi_parent_subvol))) {
n = bch2_trans_kmalloc(trans, bkey_bytes(d.k)); n = bch2_trans_kmalloc(trans, bkey_bytes(d.k));
ret = PTR_ERR_OR_ZERO(n); ret = PTR_ERR_OR_ZERO(n);
if (ret) if (ret)
......
...@@ -34,15 +34,14 @@ int bch2_reflink_p_invalid(struct bch_fs *c, struct bkey_s_c k, ...@@ -34,15 +34,14 @@ int bch2_reflink_p_invalid(struct bch_fs *c, struct bkey_s_c k,
struct printbuf *err) struct printbuf *err)
{ {
struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k); struct bkey_s_c_reflink_p p = bkey_s_c_to_reflink_p(k);
int ret = 0;
if (c->sb.version >= bcachefs_metadata_version_reflink_p_fix && bkey_fsck_err_on(le64_to_cpu(p.v->idx) < le32_to_cpu(p.v->front_pad),
le64_to_cpu(p.v->idx) < le32_to_cpu(p.v->front_pad)) { c, err, reflink_p_front_pad_bad,
prt_printf(err, "idx < front_pad (%llu < %u)", "idx < front_pad (%llu < %u)",
le64_to_cpu(p.v->idx), le32_to_cpu(p.v->front_pad)); le64_to_cpu(p.v->idx), le32_to_cpu(p.v->front_pad));
return -EINVAL; fsck_err:
} return ret;
return 0;
} }
void bch2_reflink_p_to_text(struct printbuf *out, struct bch_fs *c, void bch2_reflink_p_to_text(struct printbuf *out, struct bch_fs *c,
......
...@@ -38,7 +38,9 @@ ...@@ -38,7 +38,9 @@
x(snapshot_trees, \ x(snapshot_trees, \
RECOVERY_PASS_ALL_FSCK) \ RECOVERY_PASS_ALL_FSCK) \
x(snapshot_skiplists, \ x(snapshot_skiplists, \
BIT_ULL(BCH_RECOVERY_PASS_check_snapshots)) \ BIT_ULL(BCH_RECOVERY_PASS_check_snapshots), \
BCH_FSCK_ERR_snapshot_bad_depth, \
BCH_FSCK_ERR_snapshot_bad_skiplist) \
x(deleted_inodes, \ x(deleted_inodes, \
BIT_ULL(BCH_RECOVERY_PASS_check_inodes), \ BIT_ULL(BCH_RECOVERY_PASS_check_inodes), \
BCH_FSCK_ERR_unlinked_inode_not_on_deleted_list) \ BCH_FSCK_ERR_unlinked_inode_not_on_deleted_list) \
......
...@@ -249,7 +249,8 @@ ...@@ -249,7 +249,8 @@
x(dir_loop, 241) \ x(dir_loop, 241) \
x(hash_table_key_duplicate, 242) \ x(hash_table_key_duplicate, 242) \
x(hash_table_key_wrong_offset, 243) \ x(hash_table_key_wrong_offset, 243) \
x(unlinked_inode_not_on_deleted_list, 244) x(unlinked_inode_not_on_deleted_list, 244) \
x(reflink_p_front_pad_bad, 245)
enum bch_sb_error_id { enum bch_sb_error_id {
#define x(t, n) BCH_FSCK_ERR_##t = n, #define x(t, n) BCH_FSCK_ERR_##t = n,
......
...@@ -814,11 +814,10 @@ static int check_snapshot(struct btree_trans *trans, ...@@ -814,11 +814,10 @@ static int check_snapshot(struct btree_trans *trans,
real_depth = bch2_snapshot_depth(c, parent_id); real_depth = bch2_snapshot_depth(c, parent_id);
if (le32_to_cpu(s.depth) != real_depth && if (fsck_err_on(le32_to_cpu(s.depth) != real_depth,
(c->sb.version_upgrade_complete < bcachefs_metadata_version_snapshot_skiplists || c, snapshot_bad_depth,
fsck_err(c, snapshot_bad_depth, "snapshot with incorrect depth field, should be %u:\n %s",
"snapshot with incorrect depth field, should be %u:\n %s", real_depth, (bch2_bkey_val_to_text(&buf, c, k), buf.buf))) {
real_depth, (bch2_bkey_val_to_text(&buf, c, k), buf.buf)))) {
u = bch2_bkey_make_mut_typed(trans, iter, &k, 0, snapshot); u = bch2_bkey_make_mut_typed(trans, iter, &k, 0, snapshot);
ret = PTR_ERR_OR_ZERO(u); ret = PTR_ERR_OR_ZERO(u);
if (ret) if (ret)
...@@ -832,11 +831,9 @@ static int check_snapshot(struct btree_trans *trans, ...@@ -832,11 +831,9 @@ static int check_snapshot(struct btree_trans *trans,
if (ret < 0) if (ret < 0)
goto err; goto err;
if (!ret && if (fsck_err_on(!ret, c, snapshot_bad_skiplist,
(c->sb.version_upgrade_complete < bcachefs_metadata_version_snapshot_skiplists || "snapshot with bad skiplist field:\n %s",
fsck_err(c, snapshot_bad_skiplist, (bch2_bkey_val_to_text(&buf, c, k), buf.buf))) {
"snapshot with bad skiplist field:\n %s",
(bch2_bkey_val_to_text(&buf, c, k), buf.buf)))) {
u = bch2_bkey_make_mut_typed(trans, iter, &k, 0, snapshot); u = bch2_bkey_make_mut_typed(trans, iter, &k, 0, snapshot);
ret = PTR_ERR_OR_ZERO(u); ret = PTR_ERR_OR_ZERO(u);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment