diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2016-07-15 01:28:55 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2016-08-28 19:15:14 -0800 |
commit | 5db6cab6185caf43b4ba6ed4078a9db2ea38710a (patch) | |
tree | 710e84d0398277304b56c3672d60c589224197ba | |
parent | 5e39a8e3eda53b3eb964da89a0a0bba09bb6e9a9 (diff) |
iterators debug crap
-rw-r--r-- | drivers/md/bcache/bset.c | 36 | ||||
-rw-r--r-- | drivers/md/bcache/btree_iter.c | 20 | ||||
-rw-r--r-- | drivers/md/bcache/btree_update.c | 2 |
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); |