From 4b59a319ad29815aa8f629513df2c291c2108bf9 Mon Sep 17 00:00:00 2001
From: Kent Overstreet <kent.overstreet@gmail.com>
Date: Wed, 16 Feb 2022 00:42:34 -0500
Subject: [PATCH] bcachefs: Fix slow tracepoints

Some of our tracepoints were calling snprintf("pS") - which does symbol
table lookups - in TP_fast_assign(), which turns out to be a really bad
idea.

This was done because perf trace wasn't correctly printing tracepoints
that use %pS anymore - but it turns out trace-cmd does handle it
correctly.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
---
 fs/bcachefs/trace.h | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h
index 5e78c396e24cc..64b7d9364fd91 100644
--- a/fs/bcachefs/trace.h
+++ b/fs/bcachefs/trace.h
@@ -358,7 +358,7 @@ TRACE_EVENT(btree_node_relock_fail,
 
 	TP_STRUCT__entry(
 		__array(char,			trans_fn, 24	)
-		__array(char,			caller, 32	)
+		__field(unsigned long,		caller_ip	)
 		__field(u8,			btree_id	)
 		__field(u64,			pos_inode	)
 		__field(u64,			pos_offset	)
@@ -370,7 +370,7 @@ TRACE_EVENT(btree_node_relock_fail,
 
 	TP_fast_assign(
 		strncpy(__entry->trans_fn, trans_fn, sizeof(__entry->trans_fn));
-		snprintf(__entry->caller, sizeof(__entry->caller), "%pS", (void *) caller_ip);
+		__entry->caller_ip		= caller_ip;
 		__entry->btree_id		= btree_id;
 		__entry->pos_inode		= pos->inode;
 		__entry->pos_offset		= pos->offset;
@@ -380,9 +380,9 @@ TRACE_EVENT(btree_node_relock_fail,
 		__entry->node_lock_seq		= node_lock_seq;
 	),
 
-	TP_printk("%s %s btree %u pos %llu:%llu:%u, node %lu iter seq %u lock seq %u",
+	TP_printk("%s %pS btree %u pos %llu:%llu:%u, node %lu iter seq %u lock seq %u",
 		  __entry->trans_fn,
-		  __entry->caller,
+		  (void *) __entry->caller_ip,
 		  __entry->btree_id,
 		  __entry->pos_inode,
 		  __entry->pos_offset,
@@ -673,7 +673,7 @@ DECLARE_EVENT_CLASS(transaction_restart_iter,
 
 	TP_STRUCT__entry(
 		__array(char,			trans_fn, 24	)
-		__array(char,			caller, 32	)
+		__field(unsigned long,		caller_ip	)
 		__field(u8,			btree_id	)
 		__field(u64,			pos_inode	)
 		__field(u64,			pos_offset	)
@@ -682,16 +682,16 @@ DECLARE_EVENT_CLASS(transaction_restart_iter,
 
 	TP_fast_assign(
 		strncpy(__entry->trans_fn, trans_fn, sizeof(__entry->trans_fn));
-		snprintf(__entry->caller, sizeof(__entry->caller), "%pS", (void *) caller_ip);
+		__entry->caller_ip		= caller_ip;
 		__entry->btree_id		= btree_id;
 		__entry->pos_inode		= pos->inode;
 		__entry->pos_offset		= pos->offset;
 		__entry->pos_snapshot		= pos->snapshot;
 	),
 
-	TP_printk("%s %s btree %u pos %llu:%llu:%u",
+	TP_printk("%s %pS btree %u pos %llu:%llu:%u",
 		  __entry->trans_fn,
-		  __entry->caller,
+		  (void *) __entry->caller_ip,
 		  __entry->btree_id,
 		  __entry->pos_inode,
 		  __entry->pos_offset,
-- 
2.30.2