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

Commit f3059a54 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet
Browse files

bcache: Delete fuzz tester



This code has rotted and it hasn't been used in ages anyways.

Signed-off-by: default avatarKent Overstreet <kmo@daterainc.com>
parent 36c9ea98
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -135,7 +135,7 @@ static uint64_t btree_csum_set(struct btree *b, struct bset *i)
	return crc ^ 0xffffffffffffffffULL;
}

void bch_btree_node_read_done(struct btree *b)
static void bch_btree_node_read_done(struct btree *b)
{
	const char *err = "bad btree header";
	struct bset *i = b->sets[0].data;
@@ -1834,7 +1834,7 @@ copy: bkey_copy(m, k);
	return true;
}

bool bch_btree_insert_keys(struct btree *b, struct btree_op *op)
static bool bch_btree_insert_keys(struct btree *b, struct btree_op *op)
{
	bool ret = false;
	struct bkey *k;
+0 −2
Original line number Diff line number Diff line
@@ -369,7 +369,6 @@ static inline bool should_split(struct btree *b)
}

void bch_btree_node_read(struct btree *);
void bch_btree_node_read_done(struct btree *);
void bch_btree_node_write(struct btree *, struct closure *);

void bch_cannibalize_unlock(struct cache_set *, struct closure *);
@@ -378,7 +377,6 @@ struct btree *bch_btree_node_alloc(struct cache_set *, int, struct closure *);
struct btree *bch_btree_node_get(struct cache_set *, struct bkey *,
				int, struct btree_op *);

bool bch_btree_insert_keys(struct btree *, struct btree_op *);
bool bch_btree_insert_check_key(struct btree *, struct btree_op *,
				   struct bio *);
int bch_btree_insert(struct btree_op *, struct cache_set *);
+0 −148
Original line number Diff line number Diff line
@@ -412,149 +412,6 @@ void bch_debug_init_cache_set(struct cache_set *c)

#endif

/* Fuzz tester has rotted: */
#if 0

static ssize_t btree_fuzz(struct kobject *k, struct kobj_attribute *a,
			  const char *buffer, size_t size)
{
	void dump(struct btree *b)
	{
		struct bset *i;

		for (i = b->sets[0].data;
		     index(i, b) < btree_blocks(b) &&
		     i->seq == b->sets[0].data->seq;
		     i = ((void *) i) + set_blocks(i, b->c) * block_bytes(b->c))
			dump_bset(b, i);
	}

	struct cache_sb *sb;
	struct cache_set *c;
	struct btree *all[3], *b, *fill, *orig;
	int j;

	struct btree_op op;
	bch_btree_op_init_stack(&op);

	sb = kzalloc(sizeof(struct cache_sb), GFP_KERNEL);
	if (!sb)
		return -ENOMEM;

	sb->bucket_size = 128;
	sb->block_size = 4;

	c = bch_cache_set_alloc(sb);
	if (!c)
		return -ENOMEM;

	for (j = 0; j < 3; j++) {
		BUG_ON(list_empty(&c->btree_cache));
		all[j] = list_first_entry(&c->btree_cache, struct btree, list);
		list_del_init(&all[j]->list);

		all[j]->key = KEY(0, 0, c->sb.bucket_size);
		bkey_copy_key(&all[j]->key, &MAX_KEY);
	}

	b = all[0];
	fill = all[1];
	orig = all[2];

	while (1) {
		for (j = 0; j < 3; j++)
			all[j]->written = all[j]->nsets = 0;

		bch_bset_init_next(b);

		while (1) {
			struct bset *i = write_block(b);
			struct bkey *k = op.keys.top;
			unsigned rand;

			bkey_init(k);
			rand = get_random_int();

			op.type = rand & 1
				? BTREE_INSERT
				: BTREE_REPLACE;
			rand >>= 1;

			SET_KEY_SIZE(k, bucket_remainder(c, rand));
			rand >>= c->bucket_bits;
			rand &= 1024 * 512 - 1;
			rand += c->sb.bucket_size;
			SET_KEY_OFFSET(k, rand);
#if 0
			SET_KEY_PTRS(k, 1);
#endif
			bch_keylist_push(&op.keys);
			bch_btree_insert_keys(b, &op);

			if (should_split(b) ||
			    set_blocks(i, b->c) !=
			    __set_blocks(i, i->keys + 15, b->c)) {
				i->csum = csum_set(i);

				memcpy(write_block(fill),
				       i, set_bytes(i));

				b->written += set_blocks(i, b->c);
				fill->written = b->written;
				if (b->written == btree_blocks(b))
					break;

				bch_btree_sort_lazy(b);
				bch_bset_init_next(b);
			}
		}

		memcpy(orig->sets[0].data,
		       fill->sets[0].data,
		       btree_bytes(c));

		bch_btree_sort(b);
		fill->written = 0;
		bch_btree_node_read_done(fill);

		if (b->sets[0].data->keys != fill->sets[0].data->keys ||
		    memcmp(b->sets[0].data->start,
			   fill->sets[0].data->start,
			   b->sets[0].data->keys * sizeof(uint64_t))) {
			struct bset *i = b->sets[0].data;
			struct bkey *k, *l;

			for (k = i->start,
			     l = fill->sets[0].data->start;
			     k < end(i);
			     k = bkey_next(k), l = bkey_next(l))
				if (bkey_cmp(k, l) ||
				    KEY_SIZE(k) != KEY_SIZE(l)) {
					char buf1[80];
					char buf2[80];

					bch_bkey_to_text(buf1, sizeof(buf1), k);
					bch_bkey_to_text(buf2, sizeof(buf2), l);

					pr_err("key %zi differs: %s != %s",
					       (uint64_t *) k - i->d,
					       buf1, buf2);
				}

			for (j = 0; j < 3; j++) {
				pr_err("**** Set %i ****", j);
				dump(all[j]);
			}
			panic("\n");
		}

		pr_info("fuzz complete: %i keys", b->sets[0].data->keys);
	}
}

kobj_attribute_write(fuzz, btree_fuzz);
#endif

void bch_debug_exit(void)
{
	if (!IS_ERR_OR_NULL(debug))
@@ -564,11 +421,6 @@ void bch_debug_exit(void)
int __init bch_debug_init(struct kobject *kobj)
{
	int ret = 0;
#if 0
	ret = sysfs_create_file(kobj, &ksysfs_fuzz.attr);
	if (ret)
		return ret;
#endif

	debug = debugfs_create_dir("bcache", NULL);
	return ret;