From 5f1dd9a633dd0aa8429742cdba08d9566f49177b Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 27 Aug 2022 12:11:18 -0400 Subject: [PATCH] bcachefs: Improve btree_node_relock_fail tracepoint It now prints the error name when the btree node is an error pointer; also, don't trace failures when the the btree node is BCH_ERR_no_btree_node_up. Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_locking.c | 3 ++- fs/bcachefs/trace.h | 29 +++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c index be288fb96ea2..8376067280ea 100644 --- a/fs/bcachefs/btree_locking.c +++ b/fs/bcachefs/btree_locking.c @@ -222,7 +222,8 @@ bool __bch2_btree_node_relock(struct btree_trans *trans, } fail: if (b != ERR_PTR(-BCH_ERR_no_btree_node_cached) && - b != ERR_PTR(-BCH_ERR_no_btree_node_init)) + b != ERR_PTR(-BCH_ERR_no_btree_node_init) && + b != ERR_PTR(-BCH_ERR_no_btree_node_up)) trace_btree_node_relock_fail(trans, _RET_IP_, path, level); return false; } diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h index 3da096354a19..472175e8c2e3 100644 --- a/fs/bcachefs/trace.h +++ b/fs/bcachefs/trace.h @@ -323,7 +323,7 @@ TRACE_EVENT(btree_reserve_get_fail, TP_ARGS(trans_fn, caller_ip, required), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(size_t, required ) ), @@ -393,26 +393,31 @@ TRACE_EVENT(btree_node_relock_fail, TP_ARGS(trans, caller_ip, path, level), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(u8, btree_id ) TRACE_BPOS_entries(pos) - __field(unsigned long, node ) + __array(char, node, 24 ) __field(u32, iter_lock_seq ) __field(u32, node_lock_seq ) ), TP_fast_assign( + struct btree *b = btree_path_node(path, level); + strlcpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn)); __entry->caller_ip = caller_ip; __entry->btree_id = path->btree_id; TRACE_BPOS_assign(pos, path->pos); - __entry->node = (unsigned long) btree_path_node(path, level); + if (IS_ERR(b)) + strscpy(__entry->node, bch2_err_str(PTR_ERR(b)), sizeof(__entry->node)); + else + scnprintf(__entry->node, sizeof(__entry->node), "%px", b); __entry->iter_lock_seq = path->l[level].lock_seq; __entry->node_lock_seq = is_btree_node(path, level) ? path->l[level].b->c.lock.state.seq : 0; ), - TP_printk("%s %pS btree %s pos %llu:%llu:%u, node %lu iter seq %u lock seq %u", + TP_printk("%s %pS btree %s pos %llu:%llu:%u, node %s iter seq %u lock seq %u", __entry->trans_fn, (void *) __entry->caller_ip, bch2_btree_ids[__entry->btree_id], @@ -432,7 +437,7 @@ TRACE_EVENT(btree_node_upgrade_fail, TP_ARGS(trans, caller_ip, path, level), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(u8, btree_id ) TRACE_BPOS_entries(pos) @@ -740,7 +745,7 @@ DECLARE_EVENT_CLASS(transaction_event, TP_ARGS(trans, caller_ip), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) ), @@ -825,7 +830,7 @@ DECLARE_EVENT_CLASS(transaction_restart_iter, TP_ARGS(trans, caller_ip, path), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(u8, btree_id ) TRACE_BPOS_entries(pos) @@ -955,7 +960,7 @@ TRACE_EVENT(trans_restart_would_deadlock, have, want, want_pos), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(u8, in_traverse_all ) __field(u8, reason ) @@ -1002,7 +1007,7 @@ TRACE_EVENT(trans_restart_would_deadlock_write, TP_ARGS(trans), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) ), TP_fast_assign( @@ -1019,7 +1024,7 @@ TRACE_EVENT(trans_restart_mem_realloced, TP_ARGS(trans, caller_ip, bytes), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(unsigned long, bytes ) ), @@ -1045,7 +1050,7 @@ TRACE_EVENT(trans_restart_key_cache_key_realloced, TP_ARGS(trans, caller_ip, path, old_u64s, new_u64s), TP_STRUCT__entry( - __array(char, trans_fn, 24 ) + __array(char, trans_fn, 32 ) __field(unsigned long, caller_ip ) __field(enum btree_id, btree_id ) TRACE_BPOS_entries(pos) -- 2.25.1