Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

bcachefs: More BCH_SB_MEMBER_INVALID support

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>

+17 -9
+8 -7
fs/bcachefs/buckets.c
··· 100 100 101 101 struct bch_dev *ca = bch2_dev_tryget(c, p.ptr.dev); 102 102 if (!ca) { 103 - if (fsck_err(trans, ptr_to_invalid_device, 104 - "pointer to missing device %u\n" 105 - "while marking %s", 106 - p.ptr.dev, 107 - (printbuf_reset(&buf), 108 - bch2_bkey_val_to_text(&buf, c, k), buf.buf))) 103 + if (fsck_err_on(p.ptr.dev != BCH_SB_MEMBER_INVALID, 104 + trans, ptr_to_invalid_device, 105 + "pointer to missing device %u\n" 106 + "while marking %s", 107 + p.ptr.dev, 108 + (printbuf_reset(&buf), 109 + bch2_bkey_val_to_text(&buf, c, k), buf.buf))) 109 110 *do_update = true; 110 111 return 0; 111 112 } ··· 563 562 struct bch_fs *c = trans->c; 564 563 struct bch_dev *ca = bch2_dev_tryget(c, p.ptr.dev); 565 564 if (unlikely(!ca)) { 566 - if (insert) 565 + if (insert && p.ptr.dev != BCH_SB_MEMBER_INVALID) 567 566 ret = -EIO; 568 567 goto err; 569 568 }
+3 -1
fs/bcachefs/ec.h
··· 97 97 const struct bch_extent_ptr *data_ptr, 98 98 unsigned sectors) 99 99 { 100 - return data_ptr->dev == stripe_ptr->dev && 100 + return (data_ptr->dev == stripe_ptr->dev || 101 + data_ptr->dev == BCH_SB_MEMBER_INVALID || 102 + stripe_ptr->dev == BCH_SB_MEMBER_INVALID) && 101 103 data_ptr->gen == stripe_ptr->gen && 102 104 data_ptr->offset >= stripe_ptr->offset && 103 105 data_ptr->offset < stripe_ptr->offset + sectors;
+5
fs/bcachefs/extents.c
··· 787 787 union bch_extent_entry *entry = to_entry(ptr), *next; 788 788 bool drop_crc = true; 789 789 790 + if (k.k->type == KEY_TYPE_stripe) { 791 + ptr->dev = BCH_SB_MEMBER_INVALID; 792 + return; 793 + } 794 + 790 795 EBUG_ON(ptr < &ptrs.start->ptr || 791 796 ptr >= &ptrs.end->ptr); 792 797 EBUG_ON(ptr->type != 1 << BCH_EXTENT_ENTRY_ptr);
+1 -1
fs/bcachefs/replicas.c
··· 796 796 nr_online += test_bit(e->devs[i], devs.d); 797 797 798 798 struct bch_dev *ca = bch2_dev_rcu(c, e->devs[i]); 799 - nr_failed += ca && ca->mi.state == BCH_MEMBER_STATE_failed; 799 + nr_failed += !ca || ca->mi.state == BCH_MEMBER_STATE_failed; 800 800 } 801 801 rcu_read_unlock(); 802 802