summaryrefslogtreecommitdiff
path: root/fs/bcachefs/ec.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-07-11 13:23:17 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:42 -0400
commitf793bc15491c04481b3f12a10ff22a53cd126842 (patch)
tree5c5dffd23b7cee57bc7ac1d2b9d8d3cc39603d3d /fs/bcachefs/ec.c
parent1d2ff0a63049f03bddcc98b195213bbd37e3ab53 (diff)
downloadlwn-f793bc15491c04481b3f12a10ff22a53cd126842.tar.gz
lwn-f793bc15491c04481b3f12a10ff22a53cd126842.zip
bcachefs: Drop extra pointers when marking data as in a stripe
We ideally want the buckets used for the extra initial replicas to be reused right away. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/ec.c')
-rw-r--r--fs/bcachefs/ec.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c
index 43f4b2f0d1bf..54a95edc9901 100644
--- a/fs/bcachefs/ec.c
+++ b/fs/bcachefs/ec.c
@@ -784,12 +784,9 @@ static int ec_stripe_update_ptrs(struct bch_fs *c,
bkey_on_stack_reassemble(&sk, c, k);
e = bkey_i_to_s_extent(sk.k);
- extent_for_each_ptr(e, ptr) {
- if (ptr->dev == dev)
- ec_ptr = ptr;
- else
- ptr->cached = true;
- }
+ bch2_bkey_drop_ptrs(e.s, ptr, ptr->dev != dev);
+ ec_ptr = (void *) bch2_bkey_has_device(e.s_c, dev);
+ BUG_ON(!ec_ptr);
extent_stripe_ptr_add(e, s, ec_ptr, idx);