diff options
Diffstat (limited to 'libbcachefs/journal_reclaim.c')
-rw-r--r-- | libbcachefs/journal_reclaim.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libbcachefs/journal_reclaim.c b/libbcachefs/journal_reclaim.c index 18e45296..7a04d06b 100644 --- a/libbcachefs/journal_reclaim.c +++ b/libbcachefs/journal_reclaim.c @@ -263,6 +263,7 @@ static void bch2_journal_reclaim_fast(struct journal *j) while (!fifo_empty(&j->pin) && !atomic_read(&fifo_peek_front(&j->pin).count)) { BUG_ON(!list_empty(&fifo_peek_front(&j->pin).list)); + BUG_ON(!list_empty(&fifo_peek_front(&j->pin).flushed)); BUG_ON(!fifo_pop(&j->pin, temp)); popped = true; } @@ -547,6 +548,12 @@ void bch2_journal_reclaim(struct journal *j) if (j->prereserved.reserved * 2 > j->prereserved.remaining) min_nr = 1; + + if ((atomic_read(&c->btree_cache.dirty) * 4 > + c->btree_cache.used * 3) || + (c->btree_key_cache.nr_dirty * 4 > + c->btree_key_cache.nr_keys)) + min_nr = 1; } while (journal_flush_pins(j, seq_to_flush, min_nr)); if (!bch2_journal_error(j)) |