diff --git a/fs/bcachefs/btree_journal_iter.c b/fs/bcachefs/btree_journal_iter.c index 924b5e3a4390..85958adb59a6 100644 --- a/fs/bcachefs/btree_journal_iter.c +++ b/fs/bcachefs/btree_journal_iter.c @@ -187,7 +187,7 @@ int bch2_journal_key_insert_take(struct bch_fs *c, enum btree_id id, struct journal_keys *keys = &c->journal_keys; size_t idx = bch2_journal_key_search(keys, id, level, k->k.p); - BUG_ON(test_bit(BCH_FS_rw, &c->flags)); + BUG_ON(test_bit(BCH_FS_rw, &c->flags) && !test_bit(BCH_FS_need_delete_dead_snapshots, &c->flags)); if (idx < keys->size && journal_key_cmp(&n, &keys->data[idx]) == 0) { diff --git a/fs/bcachefs/snapshot.c b/fs/bcachefs/snapshot.c index 34e01bd8127f..cbf1369654fb 100644 --- a/fs/bcachefs/snapshot.c +++ b/fs/bcachefs/snapshot.c @@ -1607,7 +1607,7 @@ int bch2_delete_dead_snapshots(struct bch_fs *c) snapshot_id_list deleted_interior = { 0 }; int ret = 0; - if (!test_and_clear_bit(BCH_FS_need_delete_dead_snapshots, &c->flags)) + if (!test_bit(BCH_FS_need_delete_dead_snapshots, &c->flags)) return 0; trans = bch2_trans_get(c); @@ -1714,6 +1714,7 @@ int bch2_delete_dead_snapshots(struct bch_fs *c) err_create_lock: up_write(&c->snapshot_create_lock); err: + clear_bit(BCH_FS_need_delete_dead_snapshots, &c->flags); darray_exit(&deleted_interior); darray_exit(&deleted); bch2_trans_put(trans);