]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bcachefs: fix extent_has_stripe_ptr()
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 19 May 2025 02:32:30 +0000 (22:32 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 19 May 2025 02:35:33 +0000 (22:35 -0400)
This wasn't checking indirect extents.

Fixes: https://github.com/koverstreet/bcachefs/issues/887
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/ec.c
fs/bcachefs/extents.h

index fff58b78327c1a991dc22d9f718a800c31ef7ea5..c6cb26981923dd4f18450b5f0335c364f17896de 100644 (file)
@@ -507,20 +507,14 @@ static const struct bch_extent_ptr *bkey_matches_stripe(struct bch_stripe *s,
 
 static bool extent_has_stripe_ptr(struct bkey_s_c k, u64 idx)
 {
-       switch (k.k->type) {
-       case KEY_TYPE_extent: {
-               struct bkey_s_c_extent e = bkey_s_c_to_extent(k);
-               const union bch_extent_entry *entry;
-
-               extent_for_each_entry(e, entry)
-                       if (extent_entry_type(entry) ==
-                           BCH_EXTENT_ENTRY_stripe_ptr &&
-                           entry->stripe_ptr.idx == idx)
-                               return true;
+       struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
+       const union bch_extent_entry *entry;
 
-               break;
-       }
-       }
+       bkey_extent_entry_for_each(ptrs, entry)
+               if (extent_entry_type(entry) ==
+                   BCH_EXTENT_ENTRY_stripe_ptr &&
+                   entry->stripe_ptr.idx == idx)
+                       return true;
 
        return false;
 }
index e78a39e7e18f9a1f294421361940d6dfee2df4c1..9fe153183b36ec92ab58419b123a3538777c027b 100644 (file)
@@ -380,13 +380,6 @@ out:                                                                       \
 
 /* Iterate over pointers in KEY_TYPE_extent: */
 
-#define extent_for_each_entry_from(_e, _entry, _start)                 \
-       __bkey_extent_entry_for_each_from(_start,                       \
-                               extent_entry_last(_e), _entry)
-
-#define extent_for_each_entry(_e, _entry)                              \
-       extent_for_each_entry_from(_e, _entry, (_e).v->start)
-
 #define extent_ptr_next(_e, _ptr)                                      \
        __bkey_ptr_next(_ptr, extent_entry_last(_e))