diff options
-rw-r--r-- | fs/bcachefs/buckets.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c index 280b169efb62..6be1cc9ba0da 100644 --- a/fs/bcachefs/buckets.c +++ b/fs/bcachefs/buckets.c @@ -113,14 +113,26 @@ static int bch2_check_fix_ptr(struct btree_trans *trans, CLASS(bch2_dev_tryget_noerror, ca)(c, p.ptr.dev); if (!ca) { - if (fsck_err_on(p.ptr.dev != BCH_SB_MEMBER_INVALID, - trans, ptr_to_invalid_device, - "pointer to missing device %u\n" - "while marking %s", - p.ptr.dev, - (printbuf_reset(&buf), - bch2_bkey_val_to_text(&buf, c, k), buf.buf))) - *do_update = true; + if (p.ptr.dev == BCH_SB_MEMBER_INVALID) + return 0; + + if (test_bit(p.ptr.dev, c->devs_removed.d)) { + if (fsck_err(trans, ptr_to_removed_device, + "pointer to removed device %u\n" + "while marking %s", + p.ptr.dev, + (printbuf_reset(&buf), + bch2_bkey_val_to_text(&buf, c, k), buf.buf))) + *do_update = true; + } else { + if (fsck_err(trans, ptr_to_invalid_device, + "pointer to missing device %u\n" + "while marking %s", + p.ptr.dev, + (printbuf_reset(&buf), + bch2_bkey_val_to_text(&buf, c, k), buf.buf))) + *do_update = true; + } return 0; } |