diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2020-11-19 19:54:40 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-05-30 18:15:56 -0400 |
commit | fb299adc426dfa5ee84ce007f8ac48573766dd1b (patch) | |
tree | f99e8b79b7f5b8d8f26205699d2f748301e3f884 /fs/bcachefs/btree_key_cache.c | |
parent | adb4efd2198d322cb55df6e7690ddf84a4bfa8ce (diff) |
bcachefs: Ensure journal reclaim runs when btree key cache is too dirty
Ensuring the key cache isn't too dirty is critical for ensuring that the
shrinker can reclaim memory.
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/btree_key_cache.c')
-rw-r--r-- | fs/bcachefs/btree_key_cache.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_key_cache.c b/fs/bcachefs/btree_key_cache.c index aeeb36e07f9a..aa7767c3f044 100644 --- a/fs/bcachefs/btree_key_cache.c +++ b/fs/bcachefs/btree_key_cache.c @@ -460,6 +460,7 @@ bool bch2_btree_insert_key_cached(struct btree_trans *trans, { struct bch_fs *c = trans->c; struct bkey_cached *ck = (void *) iter->l[0].b; + bool kick_reclaim = false; BUG_ON(insert->u64s > ck->u64s); @@ -484,11 +485,18 @@ bool bch2_btree_insert_key_cached(struct btree_trans *trans, set_bit(BKEY_CACHED_DIRTY, &ck->flags); c->btree_key_cache.nr_dirty++; + + if (bch2_nr_btree_keys_need_flush(c)) + kick_reclaim = true; + mutex_unlock(&c->btree_key_cache.lock); } bch2_journal_pin_update(&c->journal, trans->journal_res.seq, &ck->journal, btree_key_cache_journal_flush); + + if (kick_reclaim) + mod_delayed_work(c->journal_reclaim_wq, &c->journal.reclaim_work, 0); return true; } |