xref: /linux/include/trace/events/ceph.h (revision 84318277d6334c6981ab326d4acc87c6a6ddc9b8)
1*d927a595SMax Kellermann /* SPDX-License-Identifier: GPL-2.0-or-later */
2*d927a595SMax Kellermann /* Ceph filesystem support module tracepoints
3*d927a595SMax Kellermann  *
4*d927a595SMax Kellermann  * Copyright (C) 2025 IONOS SE. All Rights Reserved.
5*d927a595SMax Kellermann  * Written by Max Kellermann (max.kellermann@ionos.com)
6*d927a595SMax Kellermann  */
7*d927a595SMax Kellermann #undef TRACE_SYSTEM
8*d927a595SMax Kellermann #define TRACE_SYSTEM ceph
9*d927a595SMax Kellermann 
10*d927a595SMax Kellermann #if !defined(_TRACE_CEPH_H) || defined(TRACE_HEADER_MULTI_READ)
11*d927a595SMax Kellermann #define _TRACE_CEPH_H
12*d927a595SMax Kellermann 
13*d927a595SMax Kellermann #include <linux/tracepoint.h>
14*d927a595SMax Kellermann 
15*d927a595SMax Kellermann #define ceph_mdsc_suspend_reasons						\
16*d927a595SMax Kellermann 	EM(ceph_mdsc_suspend_reason_no_mdsmap,		"no-mdsmap")		\
17*d927a595SMax Kellermann 	EM(ceph_mdsc_suspend_reason_no_active_mds,	"no-active-mds")	\
18*d927a595SMax Kellermann 	EM(ceph_mdsc_suspend_reason_rejected,		"rejected")		\
19*d927a595SMax Kellermann 	E_(ceph_mdsc_suspend_reason_session,		"session")
20*d927a595SMax Kellermann 
21*d927a595SMax Kellermann #ifndef __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
22*d927a595SMax Kellermann #define __NETFS_DECLARE_TRACE_ENUMS_ONCE_ONLY
23*d927a595SMax Kellermann 
24*d927a595SMax Kellermann #undef EM
25*d927a595SMax Kellermann #undef E_
26*d927a595SMax Kellermann #define EM(a, b) a,
27*d927a595SMax Kellermann #define E_(a, b) a
28*d927a595SMax Kellermann 
29*d927a595SMax Kellermann enum ceph_mdsc_suspend_reason { ceph_mdsc_suspend_reasons } __mode(byte);
30*d927a595SMax Kellermann 
31*d927a595SMax Kellermann #endif
32*d927a595SMax Kellermann 
33*d927a595SMax Kellermann /*
34*d927a595SMax Kellermann  * Export enum symbols via userspace.
35*d927a595SMax Kellermann  */
36*d927a595SMax Kellermann #undef EM
37*d927a595SMax Kellermann #undef E_
38*d927a595SMax Kellermann #define EM(a, b) TRACE_DEFINE_ENUM(a);
39*d927a595SMax Kellermann #define E_(a, b) TRACE_DEFINE_ENUM(a);
40*d927a595SMax Kellermann 
41*d927a595SMax Kellermann ceph_mdsc_suspend_reasons;
42*d927a595SMax Kellermann 
43*d927a595SMax Kellermann /*
44*d927a595SMax Kellermann  * Now redefine the EM() and E_() macros to map the enums to the strings that
45*d927a595SMax Kellermann  * will be printed in the output.
46*d927a595SMax Kellermann  */
47*d927a595SMax Kellermann #undef EM
48*d927a595SMax Kellermann #undef E_
49*d927a595SMax Kellermann #define EM(a, b)	{ a, b },
50*d927a595SMax Kellermann #define E_(a, b)	{ a, b }
51*d927a595SMax Kellermann 
52*d927a595SMax Kellermann TRACE_EVENT(ceph_mdsc_submit_request,
53*d927a595SMax Kellermann 	TP_PROTO(struct ceph_mds_client *mdsc,
54*d927a595SMax Kellermann 		 struct ceph_mds_request *req),
55*d927a595SMax Kellermann 
56*d927a595SMax Kellermann 	TP_ARGS(mdsc, req),
57*d927a595SMax Kellermann 
58*d927a595SMax Kellermann 	TP_STRUCT__entry(
59*d927a595SMax Kellermann 		__field(u64,	tid)
60*d927a595SMax Kellermann 		__field(int,	op)
61*d927a595SMax Kellermann 		__field(u64,	ino)
62*d927a595SMax Kellermann 		__field(u64,	snap)
63*d927a595SMax Kellermann 	),
64*d927a595SMax Kellermann 
65*d927a595SMax Kellermann 	TP_fast_assign(
66*d927a595SMax Kellermann 		struct inode *inode;
67*d927a595SMax Kellermann 
68*d927a595SMax Kellermann 		__entry->tid = req->r_tid;
69*d927a595SMax Kellermann 		__entry->op = req->r_op;
70*d927a595SMax Kellermann 
71*d927a595SMax Kellermann 		inode = req->r_inode;
72*d927a595SMax Kellermann 		if (inode == NULL && req->r_dentry)
73*d927a595SMax Kellermann 			inode = d_inode(req->r_dentry);
74*d927a595SMax Kellermann 
75*d927a595SMax Kellermann 		if (inode) {
76*d927a595SMax Kellermann 			__entry->ino = ceph_ino(inode);
77*d927a595SMax Kellermann 			__entry->snap = ceph_snap(inode);
78*d927a595SMax Kellermann 		} else {
79*d927a595SMax Kellermann 			__entry->ino = __entry->snap = 0;
80*d927a595SMax Kellermann 		}
81*d927a595SMax Kellermann 	),
82*d927a595SMax Kellermann 
83*d927a595SMax Kellermann 	TP_printk("R=%llu op=%s ino=%llx,%llx",
84*d927a595SMax Kellermann 		  __entry->tid,
85*d927a595SMax Kellermann 		  ceph_mds_op_name(__entry->op),
86*d927a595SMax Kellermann 		  __entry->ino, __entry->snap)
87*d927a595SMax Kellermann );
88*d927a595SMax Kellermann 
89*d927a595SMax Kellermann TRACE_EVENT(ceph_mdsc_suspend_request,
90*d927a595SMax Kellermann 	TP_PROTO(struct ceph_mds_client *mdsc,
91*d927a595SMax Kellermann 		     struct ceph_mds_session *session,
92*d927a595SMax Kellermann 		     struct ceph_mds_request *req,
93*d927a595SMax Kellermann 		     enum ceph_mdsc_suspend_reason reason),
94*d927a595SMax Kellermann 
95*d927a595SMax Kellermann 	TP_ARGS(mdsc, session, req, reason),
96*d927a595SMax Kellermann 
97*d927a595SMax Kellermann 	TP_STRUCT__entry(
98*d927a595SMax Kellermann 		__field(u64,				tid)
99*d927a595SMax Kellermann 		__field(int,				op)
100*d927a595SMax Kellermann 		__field(int,				mds)
101*d927a595SMax Kellermann 		__field(enum ceph_mdsc_suspend_reason,	reason)
102*d927a595SMax Kellermann 	),
103*d927a595SMax Kellermann 
104*d927a595SMax Kellermann 	TP_fast_assign(
105*d927a595SMax Kellermann 		__entry->tid = req->r_tid;
106*d927a595SMax Kellermann 		__entry->op = req->r_op;
107*d927a595SMax Kellermann 		__entry->mds = session ? session->s_mds : -1;
108*d927a595SMax Kellermann 		__entry->reason = reason;
109*d927a595SMax Kellermann 	),
110*d927a595SMax Kellermann 
111*d927a595SMax Kellermann 	TP_printk("R=%llu op=%s reason=%s",
112*d927a595SMax Kellermann 		  __entry->tid,
113*d927a595SMax Kellermann 		  ceph_mds_op_name(__entry->op),
114*d927a595SMax Kellermann 		  __print_symbolic(__entry->reason, ceph_mdsc_suspend_reasons))
115*d927a595SMax Kellermann );
116*d927a595SMax Kellermann 
117*d927a595SMax Kellermann TRACE_EVENT(ceph_mdsc_resume_request,
118*d927a595SMax Kellermann 	TP_PROTO(struct ceph_mds_client *mdsc,
119*d927a595SMax Kellermann 		 struct ceph_mds_request *req),
120*d927a595SMax Kellermann 
121*d927a595SMax Kellermann 	TP_ARGS(mdsc, req),
122*d927a595SMax Kellermann 
123*d927a595SMax Kellermann 	TP_STRUCT__entry(
124*d927a595SMax Kellermann 		__field(u64,				tid)
125*d927a595SMax Kellermann 		__field(int,				op)
126*d927a595SMax Kellermann 	),
127*d927a595SMax Kellermann 
128*d927a595SMax Kellermann 	TP_fast_assign(
129*d927a595SMax Kellermann 		__entry->tid = req->r_tid;
130*d927a595SMax Kellermann 		__entry->op = req->r_op;
131*d927a595SMax Kellermann 	),
132*d927a595SMax Kellermann 
133*d927a595SMax Kellermann 	TP_printk("R=%llu op=%s",
134*d927a595SMax Kellermann 		  __entry->tid,
135*d927a595SMax Kellermann 		  ceph_mds_op_name(__entry->op))
136*d927a595SMax Kellermann );
137*d927a595SMax Kellermann 
138*d927a595SMax Kellermann TRACE_EVENT(ceph_mdsc_send_request,
139*d927a595SMax Kellermann 	TP_PROTO(struct ceph_mds_session *session,
140*d927a595SMax Kellermann 		 struct ceph_mds_request *req),
141*d927a595SMax Kellermann 
142*d927a595SMax Kellermann 	TP_ARGS(session, req),
143*d927a595SMax Kellermann 
144*d927a595SMax Kellermann 	TP_STRUCT__entry(
145*d927a595SMax Kellermann 		__field(u64,		tid)
146*d927a595SMax Kellermann 		__field(int,		op)
147*d927a595SMax Kellermann 		__field(int,		mds)
148*d927a595SMax Kellermann 	),
149*d927a595SMax Kellermann 
150*d927a595SMax Kellermann 	TP_fast_assign(
151*d927a595SMax Kellermann 		__entry->tid = req->r_tid;
152*d927a595SMax Kellermann 		__entry->op = req->r_op;
153*d927a595SMax Kellermann 		__entry->mds = session->s_mds;
154*d927a595SMax Kellermann 	),
155*d927a595SMax Kellermann 
156*d927a595SMax Kellermann 	TP_printk("R=%llu op=%s mds=%d",
157*d927a595SMax Kellermann 		  __entry->tid,
158*d927a595SMax Kellermann 		  ceph_mds_op_name(__entry->op),
159*d927a595SMax Kellermann 		  __entry->mds)
160*d927a595SMax Kellermann );
161*d927a595SMax Kellermann 
162*d927a595SMax Kellermann TRACE_EVENT(ceph_mdsc_complete_request,
163*d927a595SMax Kellermann 	TP_PROTO(struct ceph_mds_client *mdsc,
164*d927a595SMax Kellermann 		     struct ceph_mds_request *req),
165*d927a595SMax Kellermann 
166*d927a595SMax Kellermann 	TP_ARGS(mdsc, req),
167*d927a595SMax Kellermann 
168*d927a595SMax Kellermann 	TP_STRUCT__entry(
169*d927a595SMax Kellermann 		__field(u64,			tid)
170*d927a595SMax Kellermann 		__field(int,			op)
171*d927a595SMax Kellermann 		__field(int,			err)
172*d927a595SMax Kellermann 		__field(unsigned long,		latency_ns)
173*d927a595SMax Kellermann 	),
174*d927a595SMax Kellermann 
175*d927a595SMax Kellermann 	TP_fast_assign(
176*d927a595SMax Kellermann 		__entry->tid = req->r_tid;
177*d927a595SMax Kellermann 		__entry->op = req->r_op;
178*d927a595SMax Kellermann 		__entry->err = req->r_err;
179*d927a595SMax Kellermann 		__entry->latency_ns = req->r_end_latency - req->r_start_latency;
180*d927a595SMax Kellermann 	),
181*d927a595SMax Kellermann 
182*d927a595SMax Kellermann 	TP_printk("R=%llu op=%s err=%d latency_ns=%lu",
183*d927a595SMax Kellermann 		  __entry->tid,
184*d927a595SMax Kellermann 		  ceph_mds_op_name(__entry->op),
185*d927a595SMax Kellermann 		  __entry->err,
186*d927a595SMax Kellermann 		  __entry->latency_ns)
187*d927a595SMax Kellermann );
188*d927a595SMax Kellermann 
189*d927a595SMax Kellermann TRACE_EVENT(ceph_handle_caps,
190*d927a595SMax Kellermann 	TP_PROTO(struct ceph_mds_client *mdsc,
191*d927a595SMax Kellermann 		 struct ceph_mds_session *session,
192*d927a595SMax Kellermann 		 int op,
193*d927a595SMax Kellermann 		 const struct ceph_vino *vino,
194*d927a595SMax Kellermann 		 struct ceph_inode_info *inode,
195*d927a595SMax Kellermann 		 u32 seq, u32 mseq, u32 issue_seq),
196*d927a595SMax Kellermann 
197*d927a595SMax Kellermann 	TP_ARGS(mdsc, session, op, vino, inode, seq, mseq, issue_seq),
198*d927a595SMax Kellermann 
199*d927a595SMax Kellermann 	TP_STRUCT__entry(
200*d927a595SMax Kellermann 		__field(int,	mds)
201*d927a595SMax Kellermann 		__field(int,	op)
202*d927a595SMax Kellermann 		__field(u64,	ino)
203*d927a595SMax Kellermann 		__field(u64,	snap)
204*d927a595SMax Kellermann 		__field(u32,	seq)
205*d927a595SMax Kellermann 		__field(u32,	mseq)
206*d927a595SMax Kellermann 		__field(u32,	issue_seq)
207*d927a595SMax Kellermann 	),
208*d927a595SMax Kellermann 
209*d927a595SMax Kellermann 	TP_fast_assign(
210*d927a595SMax Kellermann 		__entry->mds = session->s_mds;
211*d927a595SMax Kellermann 		__entry->op = op;
212*d927a595SMax Kellermann 		__entry->ino = vino->ino;
213*d927a595SMax Kellermann 		__entry->snap = vino->snap;
214*d927a595SMax Kellermann 		__entry->seq = seq;
215*d927a595SMax Kellermann 		__entry->mseq = mseq;
216*d927a595SMax Kellermann 		__entry->issue_seq = issue_seq;
217*d927a595SMax Kellermann 	),
218*d927a595SMax Kellermann 
219*d927a595SMax Kellermann 	TP_printk("mds=%d op=%s vino=%llx.%llx seq=%u iseq=%u mseq=%u",
220*d927a595SMax Kellermann 		  __entry->mds,
221*d927a595SMax Kellermann 		  ceph_cap_op_name(__entry->op),
222*d927a595SMax Kellermann 		  __entry->ino,
223*d927a595SMax Kellermann 		  __entry->snap,
224*d927a595SMax Kellermann 		  __entry->seq,
225*d927a595SMax Kellermann 		  __entry->issue_seq,
226*d927a595SMax Kellermann 		  __entry->mseq)
227*d927a595SMax Kellermann );
228*d927a595SMax Kellermann 
229*d927a595SMax Kellermann #undef EM
230*d927a595SMax Kellermann #undef E_
231*d927a595SMax Kellermann #endif /* _TRACE_CEPH_H */
232*d927a595SMax Kellermann 
233*d927a595SMax Kellermann /* This part must be outside protection */
234*d927a595SMax Kellermann #include <trace/define_trace.h>
235