summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2016-05-26 20:18:45 -0800
committerKent Overstreet <kent.overstreet@gmail.com>2017-01-18 21:39:34 -0900
commit8c10a31bca3aa6d3a4db3fd6a431aca61dee9198 (patch)
tree3ba0495418fe25c6b3917af75c42804d478f0c68
parent7728fc43f0622a2df1b3d86b3db858f8cff99c12 (diff)
bcache: move debug checks to bch_btree_node_iter_advance()
-rw-r--r--drivers/md/bcache/bset.c81
-rw-r--r--drivers/md/bcache/bset.h35
-rw-r--r--drivers/md/bcache/btree_iter.c10
-rw-r--r--drivers/md/bcache/btree_update.c2
-rw-r--r--drivers/md/bcache/extents.c2
5 files changed, 54 insertions, 76 deletions
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
index c590320facaa..608644b9593f 100644
--- a/drivers/md/bcache/bset.c
+++ b/drivers/md/bcache/bset.c
@@ -129,6 +129,34 @@ void __bch_verify_btree_nr_keys(struct btree_keys *b)
BUG_ON(b->nr.unpacked_keys != unpacked);
}
+static void bch_btree_node_iter_next_check(struct btree_node_iter *iter,
+ struct btree_keys *b,
+ struct bkey_packed *k)
+{
+ const struct bkey_format *f = &b->format;
+ const struct bkey_packed *n = bch_btree_node_iter_peek_all(iter, b);
+
+ bkey_unpack_key(f, k);
+
+ if (n &&
+ keys_out_of_order(f, k, n, iter->is_extents)) {
+ struct bkey ku = bkey_unpack_key(f, k);
+ struct bkey nu = bkey_unpack_key(f, n);
+ char buf1[80], buf2[80];
+
+ bch_dump_bucket(b);
+ bch_bkey_to_text(buf1, sizeof(buf1), &ku);
+ bch_bkey_to_text(buf2, sizeof(buf2), &nu);
+ panic("out of order/overlapping:\n%s\n%s\n", buf1, buf2);
+ }
+}
+
+#else
+
+static void bch_btree_node_iter_next_check(struct btree_node_iter *iter,
+ struct btree_keys *b,
+ struct bkey_packed *k) {}
+
#endif
/* Auxiliary search trees */
@@ -1387,6 +1415,8 @@ EXPORT_SYMBOL(bch_btree_node_iter_sort);
void bch_btree_node_iter_advance(struct btree_node_iter *iter,
struct btree_keys *b)
{
+ struct bkey_packed *k = bch_btree_node_iter_peek_all(iter, b);
+
iter->data->k += __bch_btree_node_iter_peek_all(iter, b)->u64s;
BUG_ON(iter->data->k > iter->data->end);
@@ -1397,8 +1427,9 @@ void bch_btree_node_iter_advance(struct btree_node_iter *iter,
}
btree_node_iter_sift(iter, b, 0);
+
+ bch_btree_node_iter_next_check(iter, b, k);
}
-EXPORT_SYMBOL(bch_btree_node_iter_advance);
#ifdef CONFIG_BCACHE_DEBUG
void bch_btree_node_iter_verify(struct btree_node_iter *iter,
@@ -1426,42 +1457,6 @@ next:
;
}
}
-
-static void bch_btree_node_iter_next_check(struct btree_node_iter *iter,
- struct btree_keys *b,
- struct bkey_packed *k)
-{
- const struct bkey_format *f = &b->format;
- const struct bkey_packed *n = bch_btree_node_iter_peek_all(iter, b);
-
- bkey_unpack_key(f, k);
-
- if (n &&
- keys_out_of_order(f, k, n, iter->is_extents)) {
- struct bkey ku = bkey_unpack_key(f, k);
- struct bkey nu = bkey_unpack_key(f, n);
- char buf1[80], buf2[80];
-
- bch_dump_bucket(b);
- bch_bkey_to_text(buf1, sizeof(buf1), &ku);
- bch_bkey_to_text(buf2, sizeof(buf2), &nu);
- panic("out of order/overlapping:\n%s\n%s\n", buf1, buf2);
- }
-}
-
-struct bkey_packed *bch_btree_node_iter_next_all(struct btree_node_iter *iter,
- struct btree_keys *b)
-{
- struct bkey_packed *ret = bch_btree_node_iter_peek_all(iter, b);
-
- if (ret) {
- bch_btree_node_iter_advance(iter, b);
- bch_btree_node_iter_next_check(iter, b, ret);
- }
-
- return ret;
-}
-EXPORT_SYMBOL(bch_btree_node_iter_next_all);
#endif
/*
@@ -1549,9 +1544,7 @@ static struct btree_nr_keys btree_mergesort_simple(struct btree_keys *b,
{
struct bkey_packed *in, *out = bset->start;
- while (!bch_btree_node_iter_end(iter)) {
- in = bch_btree_node_iter_next_all(iter, b);
-
+ while ((in = bch_btree_node_iter_next_all(iter, b))) {
if (!bkey_deleted(in)) {
/* XXX: need better bkey_copy */
memcpy(out, in, bkey_bytes(in));
@@ -1580,9 +1573,7 @@ static struct btree_nr_keys btree_mergesort(struct btree_keys *dst,
memset(&nr, 0, sizeof(nr));
- while (!bch_btree_node_iter_end(iter)) {
- in = bch_btree_node_iter_next_all(iter, src);
-
+ while ((in = bch_btree_node_iter_next_all(iter, src))) {
if (bkey_deleted(in))
continue;
@@ -1620,9 +1611,7 @@ static struct btree_nr_keys btree_mergesort_extents(struct btree_keys *dst,
memset(&nr, 0, sizeof(nr));
- while (!bch_btree_node_iter_end(iter)) {
- k = bch_btree_node_iter_next_all(iter, src);
-
+ while ((k = bch_btree_node_iter_next_all(iter, src))) {
if (bkey_deleted(k))
continue;
diff --git a/drivers/md/bcache/bset.h b/drivers/md/bcache/bset.h
index a38f20df2d10..ac1ba48e46df 100644
--- a/drivers/md/bcache/bset.h
+++ b/drivers/md/bcache/bset.h
@@ -486,12 +486,18 @@ bch_btree_node_iter_peek_all(struct btree_node_iter *iter,
: __bch_btree_node_iter_peek_all(iter, b);
}
-/* In debug mode, bch_btree_node_iter_next_all() does debug checks */
+static inline struct bkey_packed *
+bch_btree_node_iter_peek(struct btree_node_iter *iter, struct btree_keys *b)
+{
+ struct bkey_packed *ret;
+
+ while ((ret = bch_btree_node_iter_peek_all(iter, b)) &&
+ bkey_deleted(ret))
+ bch_btree_node_iter_advance(iter, b);
+
+ return ret;
+}
-#ifdef CONFIG_BCACHE_DEBUG
-struct bkey_packed *bch_btree_node_iter_next_all(struct btree_node_iter *,
- struct btree_keys *);
-#else
static inline struct bkey_packed *
bch_btree_node_iter_next_all(struct btree_node_iter *iter, struct btree_keys *b)
{
@@ -502,7 +508,6 @@ bch_btree_node_iter_next_all(struct btree_node_iter *iter, struct btree_keys *b)
return ret;
}
-#endif
static inline struct bkey_packed *
bch_btree_node_iter_next(struct btree_node_iter *iter, struct btree_keys *b)
@@ -517,18 +522,6 @@ bch_btree_node_iter_next(struct btree_node_iter *iter, struct btree_keys *b)
}
static inline struct bkey_packed *
-bch_btree_node_iter_peek(struct btree_node_iter *iter, struct btree_keys *b)
-{
- struct bkey_packed *ret;
-
- while ((ret = bch_btree_node_iter_peek_all(iter, b)) &&
- bkey_deleted(ret))
- bch_btree_node_iter_next_all(iter, b);
-
- return ret;
-}
-
-static inline struct bkey_packed *
bch_btree_node_iter_peek_overlapping(struct btree_node_iter *iter,
struct btree_keys *b,
struct bkey *end)
@@ -539,7 +532,7 @@ bch_btree_node_iter_peek_overlapping(struct btree_node_iter *iter,
while ((ret = bch_btree_node_iter_peek_all(iter, b)) &&
(bkey_cmp_left_packed(f, ret, bkey_start_pos(end)) <= 0))
- bch_btree_node_iter_next_all(iter, b);
+ bch_btree_node_iter_advance(iter, b);
if (!ret)
return NULL;
@@ -560,10 +553,6 @@ struct bkey_packed *bch_btree_node_iter_prev_all(struct btree_node_iter *,
for (bch_btree_node_iter_init_from_start((iter), (b)); \
((k) = bch_btree_node_iter_next(iter, b));)
-#define for_each_btree_node_key_all(b, k, iter) \
- for (bch_btree_node_iter_init_from_start((iter), (b)); \
- ((k) = bch_btree_node_iter_next_all(iter, b));)
-
struct bkey_s_c bch_btree_node_iter_next_unpack(struct btree_node_iter *,
struct btree_keys *,
struct bkey *);
diff --git a/drivers/md/bcache/btree_iter.c b/drivers/md/bcache/btree_iter.c
index 0481ffaebc95..44a93d824d22 100644
--- a/drivers/md/bcache/btree_iter.c
+++ b/drivers/md/bcache/btree_iter.c
@@ -240,10 +240,10 @@ static inline struct bkey_s_c __btree_iter_peek(struct btree_iter *iter)
return ret;
}
-static inline void __btree_iter_next_all(struct btree_iter *iter)
+static inline void __btree_iter_advance(struct btree_iter *iter)
{
- bch_btree_node_iter_next_all(&iter->node_iters[iter->level],
- &iter->nodes[iter->level]->keys);
+ bch_btree_node_iter_advance(&iter->node_iters[iter->level],
+ &iter->nodes[iter->level]->keys);
}
static inline void btree_iter_node_set(struct btree_iter *iter,
@@ -466,7 +466,7 @@ retry:
while ((k = __btree_iter_peek_all(iter)).k &&
!btree_iter_pos_cmp(iter, pos, k.k->p))
- __btree_iter_next_all(iter);
+ __btree_iter_advance(iter);
}
if (iter->locks_want >= 0)
@@ -668,7 +668,7 @@ recheck:
} else if (!bkey_deleted(k.k)) {
return k;
} else {
- __btree_iter_next_all(iter);
+ __btree_iter_advance(iter);
}
}
diff --git a/drivers/md/bcache/btree_update.c b/drivers/md/bcache/btree_update.c
index 4d44ecb3fd87..3d12a642f1be 100644
--- a/drivers/md/bcache/btree_update.c
+++ b/drivers/md/bcache/btree_update.c
@@ -656,7 +656,7 @@ static bool bch_insert_fixup_btree_ptr(struct btree_iter *iter,
btree_keys_account_key_drop(&b->keys.nr, k);
}
- bch_btree_node_iter_next_all(node_iter, &b->keys);
+ bch_btree_node_iter_advance(node_iter, &b->keys);
}
bch_btree_bset_insert(iter, b, node_iter, insert);
diff --git a/drivers/md/bcache/extents.c b/drivers/md/bcache/extents.c
index 54fed4ae1491..39060d2e03ca 100644
--- a/drivers/md/bcache/extents.c
+++ b/drivers/md/bcache/extents.c
@@ -131,7 +131,7 @@ bch_insert_fixup_key(struct btree_insert_trans *trans,
btree_keys_account_key_drop(&b->keys.nr, k);
}
- bch_btree_node_iter_next_all(node_iter, &b->keys);
+ bch_btree_node_iter_advance(node_iter, &b->keys);
}
bch_btree_insert_and_journal(insert->iter, insert->k, res);