summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/btree_cache.c3
-rw-r--r--fs/bcachefs/btree_cache.h11
-rw-r--r--fs/bcachefs/btree_io.c14
-rw-r--r--fs/bcachefs/btree_update_interior.c16
-rw-r--r--fs/bcachefs/trace.h127
5 files changed, 63 insertions, 108 deletions
diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c
index 91e0aa796e6b..c8708cba2e62 100644
--- a/fs/bcachefs/btree_cache.c
+++ b/fs/bcachefs/btree_cache.c
@@ -444,7 +444,8 @@ retry_unlocked:
}
if (b->hash_val && !ret)
- trace_and_count(c, btree_cache_reap, c, b);
+ trace_btree_node(c, b, btree_cache_reap);
+
return 0;
}
diff --git a/fs/bcachefs/btree_cache.h b/fs/bcachefs/btree_cache.h
index ca3c1b145330..3264801cbcbe 100644
--- a/fs/bcachefs/btree_cache.h
+++ b/fs/bcachefs/btree_cache.h
@@ -153,4 +153,15 @@ void bch2_btree_pos_to_text(struct printbuf *, struct bch_fs *, const struct btr
void bch2_btree_node_to_text(struct printbuf *, struct bch_fs *, const struct btree *);
void bch2_btree_cache_to_text(struct printbuf *, const struct btree_cache *);
+#define trace_btree_node(_c, _b, event) \
+do { \
+ if (trace_##event##_enabled()) { \
+ CLASS(printbuf, buf)(); \
+ printbuf_indent_add(&buf, 2); \
+ bch2_btree_pos_to_text(&buf, c, b); \
+ trace_##event(c, buf.buf); \
+ } \
+ count_event(c, event); \
+} while (0);
+
#endif /* _BCACHEFS_BTREE_CACHE_H */
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c
index 08b22bddd747..19fd951495ac 100644
--- a/fs/bcachefs/btree_io.c
+++ b/fs/bcachefs/btree_io.c
@@ -1771,7 +1771,7 @@ void bch2_btree_node_read(struct btree_trans *trans, struct btree *b,
struct bio *bio;
int ret;
- trace_and_count(c, btree_node_read, trans, b);
+ trace_btree_node(c, b, btree_node_read);
if (static_branch_unlikely(&bch2_verify_all_btree_replicas) &&
!btree_node_read_all_replicas(c, b, sync))
@@ -2505,7 +2505,17 @@ do_write:
c->opts.nochanges)
goto err;
- trace_and_count(c, btree_node_write, b, bytes_to_write, sectors_to_write);
+ if (trace_btree_node_write_enabled()) {
+ CLASS(printbuf, buf)();
+ printbuf_indent_add(&buf, 2);
+ prt_printf(&buf, "offset %u sectors %u bytes %u\n",
+ b->written,
+ sectors_to_write,
+ bytes_to_write);
+ bch2_btree_pos_to_text(&buf, c, b);
+ trace_btree_node_write(c, buf.buf);
+ }
+ count_event(c, btree_node_write);
wbio = container_of(bio_alloc_bioset(NULL,
buf_pages(data, sectors_to_write << 9),
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index a26911d4d3bf..8e3d3db2c53b 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -217,7 +217,7 @@ static void __btree_node_free(struct btree_trans *trans, struct btree *b)
{
struct bch_fs *c = trans->c;
- trace_and_count(c, btree_node_free, trans, b);
+ trace_btree_node(c, b, btree_node_free);
BUG_ON(btree_node_write_blocked(b));
BUG_ON(btree_node_dirty(b));
@@ -406,7 +406,7 @@ static struct btree *bch2_btree_node_alloc(struct btree_update *as,
ret = bch2_btree_node_hash_insert(&c->btree_cache, b, level, as->btree_id);
BUG_ON(ret);
- trace_and_count(c, btree_node_alloc, trans, b);
+ trace_btree_node(c, b, btree_node_alloc);
bch2_increment_clock(c, btree_sectors(c), WRITE);
return b;
}
@@ -1331,7 +1331,7 @@ static int bch2_btree_set_root(struct btree_update *as,
{
struct bch_fs *c = as->c;
- trace_and_count(c, btree_node_set_root, trans, b);
+ trace_btree_node(c, b, btree_node_set_root);
struct btree *old = btree_node_root(c, b);
@@ -1641,7 +1641,7 @@ static int btree_split(struct btree_update *as, struct btree_trans *trans,
if (b->nr.live_u64s > BTREE_SPLIT_THRESHOLD(c)) {
struct btree *n[2];
- trace_and_count(c, btree_node_split, trans, b);
+ trace_btree_node(c, b, btree_node_split);
n[0] = n1 = bch2_btree_node_alloc(as, trans, b->c.level);
n[1] = n2 = bch2_btree_node_alloc(as, trans, b->c.level);
@@ -1703,7 +1703,7 @@ static int btree_split(struct btree_update *as, struct btree_trans *trans,
goto err;
}
} else {
- trace_and_count(c, btree_node_compact, trans, b);
+ trace_btree_node(c, b, btree_node_compact);
n1 = bch2_btree_node_alloc_replacement(as, trans, b);
@@ -2119,7 +2119,7 @@ int __bch2_foreground_maybe_merge(struct btree_trans *trans,
as->node_start = prev->data->min_key;
as->node_end = next->data->max_key;
- trace_and_count(c, btree_node_merge, trans, b);
+ trace_btree_node(c, b, btree_node_merge);
n = bch2_btree_node_alloc(as, trans, b->c.level);
@@ -2251,8 +2251,6 @@ int bch2_btree_node_rewrite(struct btree_trans *trans,
mark_btree_node_locked(trans, trans->paths + new_path, n->c.level, BTREE_NODE_INTENT_LOCKED);
bch2_btree_path_level_init(trans, trans->paths + new_path, n);
- trace_and_count(c, btree_node_rewrite, trans, b);
-
if (parent) {
bch2_keylist_add(&as->parent_keys, &n->key);
ret = bch2_btree_insert_node(as, trans, iter->path, parent, &as->parent_keys);
@@ -2263,6 +2261,8 @@ int bch2_btree_node_rewrite(struct btree_trans *trans,
if (ret)
goto err;
+ trace_btree_node(c, b, btree_node_rewrite);
+
bch2_btree_interior_update_will_free_node(as, b);
bch2_btree_update_get_open_buckets(as, n);
diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h
index 9c5a9c551f03..b5dae1145afa 100644
--- a/fs/bcachefs/trace.h
+++ b/fs/bcachefs/trace.h
@@ -92,58 +92,6 @@ DECLARE_EVENT_CLASS(trans_str_nocaller,
__entry->trans_fn, __get_str(str))
);
-DECLARE_EVENT_CLASS(btree_node_nofs,
- TP_PROTO(struct bch_fs *c, struct btree *b),
- TP_ARGS(c, b),
-
- TP_STRUCT__entry(
- __field(dev_t, dev )
- __field(u8, level )
- __field(u8, btree_id )
- TRACE_BPOS_entries(pos)
- ),
-
- TP_fast_assign(
- __entry->dev = c->dev;
- __entry->level = b->c.level;
- __entry->btree_id = b->c.btree_id;
- TRACE_BPOS_assign(pos, b->key.k.p);
- ),
-
- TP_printk("%d,%d %u %s %llu:%llu:%u",
- MAJOR(__entry->dev), MINOR(__entry->dev),
- __entry->level,
- bch2_btree_id_str(__entry->btree_id),
- __entry->pos_inode, __entry->pos_offset, __entry->pos_snapshot)
-);
-
-DECLARE_EVENT_CLASS(btree_node,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b),
-
- TP_STRUCT__entry(
- __field(dev_t, dev )
- __array(char, trans_fn, 32 )
- __field(u8, level )
- __field(u8, btree_id )
- TRACE_BPOS_entries(pos)
- ),
-
- TP_fast_assign(
- __entry->dev = trans->c->dev;
- strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
- __entry->level = b->c.level;
- __entry->btree_id = b->c.btree_id;
- TRACE_BPOS_assign(pos, b->key.k.p);
- ),
-
- TP_printk("%d,%d %s %u %s %llu:%llu:%u",
- MAJOR(__entry->dev), MINOR(__entry->dev), __entry->trans_fn,
- __entry->level,
- bch2_btree_id_str(__entry->btree_id),
- __entry->pos_inode, __entry->pos_offset, __entry->pos_snapshot)
-);
-
DECLARE_EVENT_CLASS(bch_fs,
TP_PROTO(struct bch_fs *c),
TP_ARGS(c),
@@ -527,9 +475,9 @@ TRACE_EVENT(btree_cache_scan,
__entry->nr_to_scan, __entry->can_free, __entry->ret)
);
-DEFINE_EVENT(btree_node_nofs, btree_cache_reap,
- TP_PROTO(struct bch_fs *c, struct btree *b),
- TP_ARGS(c, b)
+DEFINE_EVENT(fs_str, btree_cache_reap,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
DEFINE_EVENT(btree_trans, btree_cache_cannibalize_lock_fail,
@@ -554,39 +502,24 @@ DEFINE_EVENT(btree_trans, btree_cache_cannibalize_unlock,
/* Btree */
-DEFINE_EVENT(btree_node, btree_node_read,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_read,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-TRACE_EVENT(btree_node_write,
- TP_PROTO(struct btree *b, unsigned bytes, unsigned sectors),
- TP_ARGS(b, bytes, sectors),
-
- TP_STRUCT__entry(
- __field(enum btree_node_type, type)
- __field(unsigned, bytes )
- __field(unsigned, sectors )
- ),
-
- TP_fast_assign(
- __entry->type = btree_node_type(b);
- __entry->bytes = bytes;
- __entry->sectors = sectors;
- ),
-
- TP_printk("bkey type %u bytes %u sectors %u",
- __entry->type , __entry->bytes, __entry->sectors)
+DEFINE_EVENT(fs_str, btree_node_write,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-DEFINE_EVENT(btree_node, btree_node_alloc,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_alloc,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-DEFINE_EVENT(btree_node, btree_node_free,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_free,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
TRACE_EVENT(btree_reserve_get_fail,
@@ -617,29 +550,29 @@ TRACE_EVENT(btree_reserve_get_fail,
__entry->ret)
);
-DEFINE_EVENT(btree_node, btree_node_compact,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_set_root,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-DEFINE_EVENT(btree_node, btree_node_merge,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_rewrite,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-DEFINE_EVENT(btree_node, btree_node_split,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_merge,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-DEFINE_EVENT(btree_node, btree_node_rewrite,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_compact,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
-DEFINE_EVENT(btree_node, btree_node_set_root,
- TP_PROTO(struct btree_trans *trans, struct btree *b),
- TP_ARGS(trans, b)
+DEFINE_EVENT(fs_str, btree_node_split,
+ TP_PROTO(struct bch_fs *c, const char *str),
+ TP_ARGS(c, str)
);
TRACE_EVENT(btree_path_relock_fail,