mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
bcachefs: Don't wait for ALLOC_SCAN_BATCH buckets in allocator
It used to be necessary for the allocator thread to batch up invalidating buckets when possible - but since we added the btree key cache that hasn't been a concern, and now it's causing the allocator thread to livelock when the filesystem is nearly full. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
3a14d58e7b
commit
b1bd955ba5
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user