summaryrefslogtreecommitdiff
path: root/fs/bcachefs/backpointers.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-11-17 23:58:21 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-12-29 13:30:39 -0500
commitaca7a26f7f47f0290e00250c6ad53a7814584159 (patch)
treee60e9a3c200b1821495f18a17d555bcabf002923 /fs/bcachefs/backpointers.c
parentba9752e5f43637096d636abb934b8172fc23ea62 (diff)
bcachefs: bch2_extent_ptr_to_bp() no longer depends on device
bch_backpointer no longer contains the bucket_offset field, it's just a direct LBA mapping (with low bits to account for compressed extent splitting), so we don't need to refer to the device to construct it anymore. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/backpointers.c')
-rw-r--r--fs/bcachefs/backpointers.c26
1 files changed, 4 insertions, 22 deletions
diff --git a/fs/bcachefs/backpointers.c b/fs/bcachefs/backpointers.c
index b19719b02df8..98d89133fc75 100644
--- a/fs/bcachefs/backpointers.c
+++ b/fs/bcachefs/backpointers.c
@@ -73,26 +73,14 @@ static bool extent_matches_bp(struct bch_fs *c,
const union bch_extent_entry *entry;
struct extent_ptr_decoded p;
- rcu_read_lock();
bkey_for_each_ptr_decode(k.k, ptrs, p, entry) {
- struct bpos bucket2;
struct bkey_i_backpointer bp2;
+ bch2_extent_ptr_to_bp(c, btree_id, level, k, p, entry, &bp2);
- if (p.ptr.cached)
- continue;
-
- struct bch_dev *ca = bch2_dev_rcu(c, p.ptr.dev);
- if (!ca)
- continue;
-
- bch2_extent_ptr_to_bp(c, ca, btree_id, level, k, p, entry, &bucket2, &bp2);
if (bpos_eq(bp.k->p, bp2.k.p) &&
- !memcmp(bp.v, &bp2.v, sizeof(bp2.v))) {
- rcu_read_unlock();
+ !memcmp(bp.v, &bp2.v, sizeof(bp2.v)))
return true;
- }
}
- rcu_read_unlock();
return false;
}
@@ -586,21 +574,15 @@ static int check_extent_to_backpointers(struct btree_trans *trans,
ptrs = bch2_bkey_ptrs_c(k);
bkey_for_each_ptr_decode(k.k, ptrs, p, entry) {
- struct bpos bucket_pos;
struct bkey_i_backpointer bp;
if (p.ptr.cached)
continue;
- rcu_read_lock();
- struct bch_dev *ca = bch2_dev_rcu_noerror(c, p.ptr.dev);
- if (ca)
- bch2_extent_ptr_to_bp(c, ca, btree, level, k, p, entry, &bucket_pos, &bp);
- rcu_read_unlock();
-
- if (!ca)
+ if (p.ptr.dev == BCH_SB_MEMBER_INVALID)
continue;
+ bch2_extent_ptr_to_bp(c, btree, level, k, p, entry, &bp);
ret = check_bp_exists(trans, s, &bp, k);
if (ret)
return ret;