Commit 494d458c authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: fix extent_has_stripe_ptr()

This wasn't checking indirect extents.

Fixes: https://github.com/koverstreet/bcachefs/issues/887


Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 49771a75
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -507,21 +507,15 @@ 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);
	struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
	const union bch_extent_entry *entry;

		extent_for_each_entry(e, entry)
	bkey_extent_entry_for_each(ptrs, entry)
		if (extent_entry_type(entry) ==
		    BCH_EXTENT_ENTRY_stripe_ptr &&
		    entry->stripe_ptr.idx == idx)
			return true;

		break;
	}
	}

	return false;
}

+0 −7
Original line number Diff line number Diff line
@@ -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))