]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: check for backpointers to invalid device
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 18 Nov 2024 05:16:52 +0000 (00:16 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:19 +0000 (01:36 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c
fs/bcachefs/sb-errors_format.h

index a9ffbea277bde5d56c9571bb7fe903b5652a726f..1c7ddaed6c1c8f8596d02224b3d2b0e33654a907 100644 (file)
@@ -59,6 +59,10 @@ int bch2_backpointer_validate(struct bch_fs *c, struct bkey_s_c k,
                         "backpointer level bad: %u >= %u",
                         bp.v->level, BTREE_MAX_DEPTH);
 
+       bkey_fsck_err_on(bp.k->p.inode == BCH_SB_MEMBER_INVALID,
+                        c, backpointer_dev_bad,
+                        "backpointer for BCH_SB_MEMBER_INVALID");
+
        rcu_read_lock();
        struct bch_dev *ca = bch2_dev_rcu_noerror(c, bp.k->p.inode);
        if (!ca) {
index d5b18ff1645c6653319e1cc3882f00dfd0c758b7..9e3425f533bc2919fb5f045ff7195b3f5bfc89f6 100644 (file)
@@ -138,6 +138,7 @@ enum bch_fsck_flags {
        x(discarding_bucket_not_in_need_discard_btree,          291,    0)              \
        x(backpointer_bucket_offset_wrong,                      125,    0)              \
        x(backpointer_level_bad,                                294,    0)              \
+       x(backpointer_dev_bad,                                  297,    0)              \
        x(backpointer_to_missing_device,                        126,    0)              \
        x(backpointer_to_missing_alloc,                         127,    0)              \
        x(backpointer_to_missing_ptr,                           128,    0)              \
@@ -307,7 +308,7 @@ enum bch_fsck_flags {
        x(logged_op_but_clean,                                  283,    FSCK_AUTOFIX)   \
        x(compression_opt_not_marked_in_sb,                     295,    FSCK_AUTOFIX)   \
        x(compression_type_not_marked_in_sb,                    296,    FSCK_AUTOFIX)   \
-       x(MAX,                                                  297,    0)
+       x(MAX,                                                  298,    0)
 
 enum bch_sb_error_id {
 #define x(t, n, ...) BCH_FSCK_ERR_##t = n,