Commit e28ef07e authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: Simplify stripe_idx_to_delete

This is not technically correct - it's subject to a race if we ever end
up with a stripe with all empty blocks (that needs to be deleted) being
held open. But the "correct" version was much too inefficient, and soon
we'll be adding a stripes LRU.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 46e14854
......@@ -659,14 +659,13 @@ static void bch2_stripe_close(struct bch_fs *c, struct ec_stripe_new *s)
static u64 stripe_idx_to_delete(struct bch_fs *c)
{
ec_stripes_heap *h = &c->ec_stripes_heap;
size_t heap_idx;
lockdep_assert_held(&c->ec_stripes_heap_lock);
for (heap_idx = 0; heap_idx < h->used; heap_idx++)
if (h->data[heap_idx].blocks_nonempty == 0 &&
!bch2_stripe_is_open(c, h->data[heap_idx].idx))
return h->data[heap_idx].idx;
if (h->used &&
h->data[0].blocks_nonempty == 0 &&
!bch2_stripe_is_open(c, h->data[0].idx))
return h->data[0].idx;
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment