bcachefs: Fix assert in bch2_backpointer_invalid()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 22 Mar 2024 04:15:41 +0000 (00:15 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Apr 2024 00:36:10 +0000 (20:36 -0400)
Backpointers that point to invalid devices are caught by fsck, not
.key_invalid; so .key_invalid needs to check for them instead of hitting
asserts.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c

index 8cb35ea572cb95ce13a956b21a4ec3a40ac39cdb..21b3ae7df82404474f8da819ac7e3648a87f5f70 100644 (file)
@@ -44,6 +44,11 @@ int bch2_backpointer_invalid(struct bch_fs *c, struct bkey_s_c k,
                             struct printbuf *err)
 {
        struct bkey_s_c_backpointer bp = bkey_s_c_to_backpointer(k);
+
+       /* these will be caught by fsck */
+       if (!bch2_dev_exists2(c, bp.k->p.inode))
+               return 0;
+
        struct bpos bucket = bp_pos_to_bucket(c, bp.k->p);
        int ret = 0;