summaryrefslogtreecommitdiff
path: root/libbcachefs/alloc_background.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-02-26 21:36:39 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-02-27 21:36:36 -0500
commit30cca2e94d0dfa8c3151daf1393f402d32bb9407 (patch)
treecbf1b7ccfdcaace597389147c27031c0e8106f12 /libbcachefs/alloc_background.c
parentbf359ac1ad97929e1023632aafb272d655504516 (diff)
Update bcachefs sources to ca97ee3577 bcachefs: bch2_btree_iter_peek_and_restart_outlined()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'libbcachefs/alloc_background.c')
-rw-r--r--libbcachefs/alloc_background.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/libbcachefs/alloc_background.c b/libbcachefs/alloc_background.c
index b39a4533..5f4bb82c 100644
--- a/libbcachefs/alloc_background.c
+++ b/libbcachefs/alloc_background.c
@@ -2175,21 +2175,24 @@ void bch2_dev_allocator_remove(struct bch_fs *c, struct bch_dev *ca)
}
mutex_unlock(&c->btree_reserve_cache_lock);
- while (1) {
- struct open_bucket *ob;
-
- spin_lock(&c->freelist_lock);
- if (!ca->open_buckets_partial_nr) {
+ spin_lock(&c->freelist_lock);
+ i = 0;
+ while (i < c->open_buckets_partial_nr) {
+ struct open_bucket *ob =
+ c->open_buckets + c->open_buckets_partial[i];
+
+ if (ob->dev == ca->dev_idx) {
+ swap(c->open_buckets_partial[i],
+ c->open_buckets_partial[--c->open_buckets_partial_nr]);
+ ob->on_partial_list = false;
spin_unlock(&c->freelist_lock);
- break;
+ bch2_open_bucket_put(c, ob);
+ spin_lock(&c->freelist_lock);
+ } else {
+ i++;
}
- ob = c->open_buckets +
- ca->open_buckets_partial[--ca->open_buckets_partial_nr];
- ob->on_partial_list = false;
- spin_unlock(&c->freelist_lock);
-
- bch2_open_bucket_put(c, ob);
}
+ spin_unlock(&c->freelist_lock);
bch2_ec_stop_dev(c, ca);