diff options
-rw-r--r-- | drivers/md/bcache/bset.c | 8 | ||||
-rw-r--r-- | drivers/md/bcache/btree.h | 1 | ||||
-rw-r--r-- | drivers/md/bcache/debug.h | 1 | ||||
-rw-r--r-- | include/trace/events/bcache.h | 36 |
4 files changed, 42 insertions, 4 deletions
diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c index 305bb5421839..c249a9ef41c0 100644 --- a/drivers/md/bcache/bset.c +++ b/drivers/md/bcache/bset.c @@ -15,6 +15,7 @@ #include <linux/console.h> #include <linux/random.h> #include <linux/prefetch.h> +#include <trace/events/bcache.h> static bool keys_out_of_order(const struct bkey_format *f, const struct bkey_packed *prev, @@ -939,8 +940,10 @@ static struct bkey_packed *bset_search_tree(const struct bkey_format *format, * have. */ if (bkey_pack_pos_lossy(&packed_search, search, format) == - BKEY_PACK_POS_FAIL) + BKEY_PACK_POS_FAIL) { + trace_bkey_pack_pos_lossy_fail(search); return t->data->start; + } while (1) { if (likely(n << 4 < t->size)) { @@ -1125,6 +1128,9 @@ void bch_btree_node_iter_init(struct btree_node_iter *iter, struct bkey_packed p, *packed_search = bkey_pack_pos(&p, search, &b->format) ? &p : NULL; + if (!packed_search) + trace_bkey_pack_pos_fail(search); + __bch_btree_node_iter_init(iter, b, b->set); for (t = b->set; t <= b->set + b->nsets; t++) diff --git a/drivers/md/bcache/btree.h b/drivers/md/bcache/btree.h index 8cb60f63726e..44011bdacf2b 100644 --- a/drivers/md/bcache/btree.h +++ b/drivers/md/bcache/btree.h @@ -79,6 +79,7 @@ * and fails if the sequence number doesn't match. */ +#include "bcache.h" #include "bset.h" #include "debug.h" #include "six.h" diff --git a/drivers/md/bcache/debug.h b/drivers/md/bcache/debug.h index a3567a2e10c9..da35861aa3cb 100644 --- a/drivers/md/bcache/debug.h +++ b/drivers/md/bcache/debug.h @@ -2,6 +2,7 @@ #define _BCACHE_DEBUG_H struct bio; +struct btree; struct cached_dev; struct cache_set; diff --git a/include/trace/events/bcache.h b/include/trace/events/bcache.h index ffc342f2a11c..d750bce47ff4 100644 --- a/include/trace/events/bcache.h +++ b/include/trace/events/bcache.h @@ -6,6 +6,7 @@ #include <linux/tracepoint.h> +#include "btree.h" #include "keylist.h" DECLARE_EVENT_CLASS(bcache_request, @@ -40,14 +41,31 @@ DECLARE_EVENT_CLASS(bcache_request, (unsigned long long)__entry->orig_sector) ); +DECLARE_EVENT_CLASS(bpos, + TP_PROTO(struct bpos p), + TP_ARGS(p), + + TP_STRUCT__entry( + __field(u64, inode ) + __field(u64, offset ) + ), + + TP_fast_assign( + __entry->inode = p.inode; + __entry->offset = p.offset; + ), + + TP_printk("%llu:%llu", __entry->inode, __entry->offset) +); + DECLARE_EVENT_CLASS(bkey, TP_PROTO(const struct bkey *k), TP_ARGS(k), TP_STRUCT__entry( - __field(u32, size ) - __field(u32, inode ) + __field(u64, inode ) __field(u64, offset ) + __field(u32, size ) ), TP_fast_assign( @@ -56,7 +74,7 @@ DECLARE_EVENT_CLASS(bkey, __entry->size = k->size; ), - TP_printk("%u:%llu len %u", __entry->inode, + TP_printk("%llu:%llu len %u", __entry->inode, __entry->offset, __entry->size) ); @@ -376,6 +394,18 @@ DEFINE_EVENT(cache, bcache_cache_read_write_done, TP_ARGS(ca) ); +/* Searching */ + +DEFINE_EVENT(bpos, bkey_pack_pos_fail, + TP_PROTO(struct bpos p), + TP_ARGS(p) +); + +DEFINE_EVENT(bpos, bkey_pack_pos_lossy_fail, + TP_PROTO(struct bpos p), + TP_ARGS(p) +); + /* Btree */ DECLARE_EVENT_CLASS(btree_node, |