bcachefs: Fix btree key cache shutdown
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 11 Nov 2020 22:47:39 +0000 (17:47 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:46 +0000 (17:08 -0400)
On emergency shutdown, we might still have dirty keys in the btree key
cache that need to be cleaned up properly.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_key_cache.c
fs/bcachefs/journal_reclaim.c

index 4c61324f59d440797a462dd5dd2fbe15d35b7049..8b5e690a4d83649d579545802b3905759dfdf5a3 100644 (file)
@@ -490,6 +490,9 @@ void bch2_fs_btree_key_cache_exit(struct btree_key_cache *bc)
        list_splice(&bc->dirty, &bc->clean);
 
        list_for_each_entry_safe(ck, n, &bc->clean, list) {
+               bch2_journal_pin_drop(&c->journal, &ck->journal);
+               bch2_journal_preres_put(&c->journal, &ck->res);
+
                kfree(ck->k);
                kfree(ck);
                bc->nr_keys--;
index da28761e7942ebcde677e9b094499209fc865c04..f9e0160074db86c901477808544495124eed37e8 100644 (file)
@@ -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;
        }