summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2015-04-22 15:47:32 -0700
committerKent Overstreet <kent.overstreet@gmail.com>2016-10-07 12:33:58 -0800
commit2e3f9d5986b74dfaaed71177530ffec3098f3e9a (patch)
treec6fef9b7ed47b3dd1d6fc2dfa4cc9e519e20461d
parent55c6ca8f2d6e5c10f679dd82654171602dc2494c (diff)
bcache: Add some more slowpath tracepoints
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--drivers/md/bcache/bset.c8
-rw-r--r--drivers/md/bcache/btree.h1
-rw-r--r--drivers/md/bcache/debug.h1
-rw-r--r--include/trace/events/bcache.h36
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,