Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

bcache: Add make_btree_freeing_key()



Refactoring, prep work for incremental garbage collection.

Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
parent f269af5a
Loading
Loading
Loading
Loading
+18 −13
Original line number Diff line number Diff line
@@ -1107,6 +1107,22 @@ static struct btree *btree_node_alloc_replacement(struct btree *b)
	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 */

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,
		closure_sync(&cl);
		bch_btree_set_root(n1);
	} 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);
		atomic_inc(&b->c->prio_blocked);
		make_btree_freeing_key(b, parent_keys->top);
		bch_keylist_push(parent_keys);
	}

	rw_unlock(true, n1);