summaryrefslogtreecommitdiff
path: root/fs/bcachefs/alloc_background.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/alloc_background.c')
-rw-r--r--fs/bcachefs/alloc_background.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index be86e36e816a..a8a59140efbe 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -1071,7 +1071,7 @@ static int bch2_allocator_thread(void *arg)
pr_debug("free_inc now empty");
- do {
+ while (1) {
cond_resched();
/*
* Find some buckets that we can invalidate, either
@@ -1095,22 +1095,21 @@ static int bch2_allocator_thread(void *arg)
wake_up_process(c->gc_thread);
}
+ if (nr)
+ break;
+
/*
* If we found any buckets, we have to invalidate them
* before we scan for more - but if we didn't find very
* many we may want to wait on more buckets being
* available so we don't spin:
*/
- if (!nr ||
- (nr < ALLOC_SCAN_BATCH(ca) &&
- !fifo_empty(&ca->free[RESERVE_NONE]))) {
- ret = wait_buckets_available(c, ca);
- if (ret) {
- up_read(&c->gc_lock);
- goto stop;
- }
+ ret = wait_buckets_available(c, ca);
+ if (ret) {
+ up_read(&c->gc_lock);
+ goto stop;
}
- } while (!nr);
+ }
up_read(&c->gc_lock);