return ret;
 }
 
+static int bch2_snapshot_table_make_room(struct bch_fs *c, u32 id)
+{
+       mutex_lock(&c->snapshot_table_lock);
+       int ret = snapshot_t_mut(c, id)
+               ? 0
+               : -BCH_ERR_ENOMEM_mark_snapshot;
+       mutex_unlock(&c->snapshot_table_lock);
+       return ret;
+}
+
 static int __bch2_mark_snapshot(struct btree_trans *trans,
                       enum btree_id btree, unsigned level,
                       struct bkey_s_c old, struct bkey_s_c new,
        }
        bch2_trans_iter_exit(trans, &iter);
 
-       return  bch2_btree_insert_trans(trans, BTREE_ID_snapshots, &snapshot->k_i, 0) ?:
-               bch2_mark_snapshot(trans, BTREE_ID_snapshots, 0,
-                                  bkey_s_c_null, bkey_i_to_s(&snapshot->k_i), 0);
+       return  bch2_snapshot_table_make_room(c, id) ?:
+               bch2_btree_insert_trans(trans, BTREE_ID_snapshots, &snapshot->k_i, 0);
 }
 
 /* Figure out which snapshot nodes belong in the same tree: */