gc_pos is now based on keys, not nodes, for invariantness w.r.t. splits
and merges
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
};
}
-/*
- * GC position of the pointers within a btree node: note, _not_ for &b->key
- * itself, that lives in the parent node:
- */
-static inline struct gc_pos gc_pos_btree_node(struct btree *b)
-{
- return gc_pos_btree(b->c.btree_id, b->c.level, b->key.k.p);
-}
-
static inline int gc_btree_order(enum btree_id btree)
{
if (btree == BTREE_ID_alloc)
{
trans_for_each_update(trans, i)
if (btree_node_type_has_triggers(i->bkey_type) &&
- gc_visited(trans->c, gc_pos_btree_node(insert_l(trans, i)->b))) {
+ gc_visited(trans->c, gc_pos_btree(i->btree_id, i->level, i->k->k.p))) {
int ret = run_one_mem_trigger(trans, i, i->flags|BTREE_TRIGGER_gc);
if (ret)
return ret;