summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2016-07-15 01:28:55 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2016-08-28 19:15:14 -0800
commit5db6cab6185caf43b4ba6ed4078a9db2ea38710a (patch)
tree710e84d0398277304b56c3672d60c589224197ba
parent5e39a8e3eda53b3eb964da89a0a0bba09bb6e9a9 (diff)
iterators debug crap
-rw-r--r--drivers/md/bcache/bset.c36
-rw-r--r--drivers/md/bcache/btree_iter.c20
-rw-r--r--drivers/md/bcache/btree_update.c2
3 files changed, 51 insertions, 7 deletions
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index 2c8236b3f1a0..35488f873410 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -184,12 +184,40 @@ void bch_verify_key_order(struct btree_keys *b,
struct bkey uk, uw = bkey_unpack_key(f, where);
k = bkey_prev(t, where);
- BUG_ON(k &&
- keys_out_of_order(f, k, where, b->ops->is_extents));
+ //BUG_ON(k &&
+ // keys_out_of_order(f, k, where, b->ops->is_extents));
+ if (k &&
+ keys_out_of_order(f, k, where, b->ops->is_extents)) {
+ char buf1[100];
+ char buf2[100];
+ struct bkey ku;
+
+ ku = bkey_unpack_key(f, k);
+ bch_bkey_to_text(buf1, sizeof(buf1), &ku);
+
+ ku = bkey_unpack_key(f, where);
+ bch_bkey_to_text(buf2, sizeof(buf2), &ku);
+
+ panic("out of order with prev:\n%s\n%s\n", buf1, buf2);
+ }
k = bkey_next(where);
- BUG_ON(k != bset_bkey_last(t->data) &&
- keys_out_of_order(f, where, k, b->ops->is_extents));
+ //BUG_ON(k != bset_bkey_last(t->data) &&
+ // keys_out_of_order(f, where, k, b->ops->is_extents));
+ if (k != bset_bkey_last(t->data) &&
+ keys_out_of_order(f, where, k, b->ops->is_extents)) {
+ char buf1[100];
+ char buf2[100];
+ struct bkey ku;
+
+ ku = bkey_unpack_key(f, where);
+ bch_bkey_to_text(buf1, sizeof(buf1), &ku);
+
+ ku = bkey_unpack_key(f, k);
+ bch_bkey_to_text(buf2, sizeof(buf2), &ku);
+
+ panic("out of order with next:\n%s\n%s\n", buf1, buf2);
+ }
for (t = b->set; t <= b->set + b->nsets; t++) {
if (!t->data->u64s)
diff --git a/drivers/md/bcache/btree_iter.c b/drivers/md/bcache/btree_iter.c
index 0c10780b74fb..b52f40cdf34b 100644
--- a/drivers/md/bcache/btree_iter.c
+++ b/drivers/md/bcache/btree_iter.c
@@ -216,12 +216,26 @@ static void __bch_btree_iter_verify(struct btree_node_iter *iter,
while (k && bkey_deleted(k))
k = bkey_prev(t, k);
- BUG_ON(k && btree_iter_pos_cmp_packed(f, pos, k,
- strictly_greater));
+ //BUG_ON(k && btree_iter_pos_cmp_packed(f, pos, k,
+ // strictly_greater));
+ if (k && btree_iter_pos_cmp_packed(f, pos, k, strictly_greater)) {
+ char buf1[80];
+ struct bkey ku = bkey_unpack_key(f, k);
+
+ bch_bkey_to_text(buf1, sizeof(buf1), &ku);
+ panic("k not after pos:\n%s\n%llu:%llu\n", buf1, pos.inode, pos.offset);
+ }
}
k = bch_btree_node_iter_peek_all(iter, &b->keys);
- BUG_ON(k && !btree_iter_pos_cmp_packed(f, pos, k, strictly_greater));
+ //BUG_ON(k && !btree_iter_pos_cmp_packed(f, pos, k, strictly_greater));
+ if (k && !btree_iter_pos_cmp_packed(f, pos, k, strictly_greater)) {
+ char buf1[80];
+ struct bkey ku = bkey_unpack_key(f, k);
+
+ bch_bkey_to_text(buf1, sizeof(buf1), &ku);
+ panic("k not before pos:\n%s\n%llu:%llu\n", buf1, pos.inode, pos.offset);
+ }
}
void bch_btree_iter_verify(struct btree_iter *iter, struct btree *b)
diff --git a/drivers/md/bcache/btree_update.c b/drivers/md/bcache/btree_update.c
index 32a3915fd118..297af41ff3aa 100644
--- a/drivers/md/bcache/btree_update.c
+++ b/drivers/md/bcache/btree_update.c
@@ -1515,6 +1515,8 @@ btree_insert_key(struct btree_insert *trans,
struct btree *b = iter->nodes[0];
enum btree_insert_ret ret;
+ bch_btree_iter_verify(iter, b);
+
ret = !b->keys.ops->is_extents
? bch_insert_fixup_key(trans, insert, res)
: bch_insert_fixup_extent(trans, insert, res);