bcachefs: Simplify stripe_idx_to_delete
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 11 Mar 2023 04:37:19 +0000 (23:37 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:57 +0000 (17:09 -0400)
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: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/ec.c

index 0a2e7db..c747ae2 100644 (file)
@@ -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;
 }