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