Commit 8835c123 authored by Kent Overstreet's avatar Kent Overstreet

bcache: Add make_btree_freeing_key()

Refactoring, prep work for incremental garbage collection.
Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
parent f269af5a
...@@ -1107,6 +1107,22 @@ static struct btree *btree_node_alloc_replacement(struct btree *b) ...@@ -1107,6 +1107,22 @@ static struct btree *btree_node_alloc_replacement(struct btree *b)
return n; return n;
} }
static void make_btree_freeing_key(struct btree *b, struct bkey *k)
{
unsigned i;
bkey_copy(k, &b->key);
bkey_copy_key(k, &ZERO_KEY);
for (i = 0; i < KEY_PTRS(k); i++) {
uint8_t g = PTR_BUCKET(b->c, k, i)->gen + 1;
SET_PTR_GEN(k, i, g);
}
atomic_inc(&b->c->prio_blocked);
}
/* Garbage collection */ /* Garbage collection */
uint8_t __bch_btree_mark_key(struct cache_set *c, int level, struct bkey *k) uint8_t __bch_btree_mark_key(struct cache_set *c, int level, struct bkey *k)
...@@ -2030,20 +2046,9 @@ static int btree_split(struct btree *b, struct btree_op *op, ...@@ -2030,20 +2046,9 @@ static int btree_split(struct btree *b, struct btree_op *op,
closure_sync(&cl); closure_sync(&cl);
bch_btree_set_root(n1); bch_btree_set_root(n1);
} else { } else {
unsigned i;
bkey_copy(parent_keys->top, &b->key);
bkey_copy_key(parent_keys->top, &ZERO_KEY);
for (i = 0; i < KEY_PTRS(&b->key); i++) {
uint8_t g = PTR_BUCKET(b->c, &b->key, i)->gen + 1;
SET_PTR_GEN(parent_keys->top, i, g);
}
bch_keylist_push(parent_keys);
closure_sync(&cl); closure_sync(&cl);
atomic_inc(&b->c->prio_blocked); make_btree_freeing_key(b, parent_keys->top);
bch_keylist_push(parent_keys);
} }
rw_unlock(true, n1); rw_unlock(true, n1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment