xref: /linux/fs/smb/client/trace.h (revision 14c5eb685cdefbd32e73d2723071ecbd8effbce9)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  *   Copyright (C) 2018, Microsoft Corporation.
4  *
5  *   Author(s): Steve French <stfrench@microsoft.com>
6  *
7  * Please use this 3-part article as a reference for writing new tracepoints:
8  * https://lwn.net/Articles/379903/
9  */
10 #undef TRACE_SYSTEM
11 #define TRACE_SYSTEM cifs
12 
13 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
14 #define _CIFS_TRACE_H
15 
16 #include <linux/tracepoint.h>
17 #include <linux/net.h>
18 #include <linux/inet.h>
19 
20 /*
21  * Specify enums for tracing information.
22  */
23 #define smb_eio_traces \
24 	EM(smb_eio_trace_compress_copy,			"compress_copy") \
25 	EM(smb_eio_trace_copychunk_inv_rsp,		"copychunk_inv_rsp") \
26 	EM(smb_eio_trace_copychunk_overcopy_b,		"copychunk_overcopy_b") \
27 	EM(smb_eio_trace_copychunk_overcopy_c,		"copychunk_overcopy_c") \
28 	EM(smb_eio_trace_create_rsp_too_small,		"create_rsp_too_small") \
29 	EM(smb_eio_trace_dfsref_no_rsp,			"dfsref_no_rsp") \
30 	EM(smb_eio_trace_ea_overrun,			"ea_overrun") \
31 	EM(smb_eio_trace_extract_will_pin,		"extract_will_pin") \
32 	EM(smb_eio_trace_forced_shutdown,		"forced_shutdown") \
33 	EM(smb_eio_trace_getacl_bcc_too_small,		"getacl_bcc_too_small") \
34 	EM(smb_eio_trace_getcifsacl_param_count,	"getcifsacl_param_count") \
35 	EM(smb_eio_trace_getdfsrefer_bcc_too_small,	"getdfsrefer_bcc_too_small") \
36 	EM(smb_eio_trace_getextattr_bcc_too_small,	"getextattr_bcc_too_small") \
37 	EM(smb_eio_trace_getextattr_inv_size,		"getextattr_inv_size") \
38 	EM(smb_eio_trace_getsrvinonum_bcc_too_small,	"getsrvinonum_bcc_too_small") \
39 	EM(smb_eio_trace_getsrvinonum_size,		"getsrvinonum_size") \
40 	EM(smb_eio_trace_ioctl_data_len,		"ioctl_data_len") \
41 	EM(smb_eio_trace_ioctl_no_rsp,			"ioctl_no_rsp") \
42 	EM(smb_eio_trace_ioctl_out_off,			"ioctl_out_off") \
43 	EM(smb_eio_trace_lock_bcc_too_small,		"lock_bcc_too_small") \
44 	EM(smb_eio_trace_lock_data_too_small,		"lock_data_too_small") \
45 	EM(smb_eio_trace_malformed_ksid_key,		"malformed_ksid_key") \
46 	EM(smb_eio_trace_malformed_sid_key,		"malformed_sid_key") \
47 	EM(smb_eio_trace_mkdir_no_rsp,			"mkdir_no_rsp") \
48 	EM(smb_eio_trace_neg_bad_rsplen,		"neg_bad_rsplen") \
49 	EM(smb_eio_trace_neg_decode_token,		"neg_decode_token") \
50 	EM(smb_eio_trace_neg_info_caps,			"neg_info_caps") \
51 	EM(smb_eio_trace_neg_info_dialect,		"neg_info_dialect") \
52 	EM(smb_eio_trace_neg_info_fail,			"neg_info_fail") \
53 	EM(smb_eio_trace_neg_info_sec_mode,		"neg_info_sec_mode") \
54 	EM(smb_eio_trace_neg_inval_dialect,		"neg_inval_dialect") \
55 	EM(smb_eio_trace_neg_no_crypt_key,		"neg_no_crypt_key") \
56 	EM(smb_eio_trace_neg_sec_blob_too_small,	"neg_sec_blob_too_small") \
57 	EM(smb_eio_trace_neg_unreq_dialect,		"neg_unreq_dialect") \
58 	EM(smb_eio_trace_no_auth_key,			"no_auth_key") \
59 	EM(smb_eio_trace_no_lease_key,			"no_lease_key") \
60 	EM(smb_eio_trace_not_netfs_writeback,		"not_netfs_writeback") \
61 	EM(smb_eio_trace_null_pointers,			"null_pointers") \
62 	EM(smb_eio_trace_oldqfsinfo_bcc_too_small,	"oldqfsinfo_bcc_too_small") \
63 	EM(smb_eio_trace_pend_del_fail,			"pend_del_fail") \
64 	EM(smb_eio_trace_qalleas_bcc_too_small,		"qalleas_bcc_too_small") \
65 	EM(smb_eio_trace_qalleas_ea_overlong,		"qalleas_ea_overlong") \
66 	EM(smb_eio_trace_qalleas_overlong,		"qalleas_overlong") \
67 	EM(smb_eio_trace_qfileinfo_bcc_too_small,	"qfileinfo_bcc_too_small") \
68 	EM(smb_eio_trace_qfileinfo_invalid,		"qfileinfo_invalid") \
69 	EM(smb_eio_trace_qfsattrinfo_bcc_too_small,	"qfsattrinfo_bcc_too_small") \
70 	EM(smb_eio_trace_qfsdevinfo_bcc_too_small,	"qfsdevinfo_bcc_too_small") \
71 	EM(smb_eio_trace_qfsinfo_bcc_too_small,		"qfsinfo_bcc_too_small") \
72 	EM(smb_eio_trace_qfsposixinfo_bcc_too_small,	"qfsposixinfo_bcc_too_small") \
73 	EM(smb_eio_trace_qfsunixinfo_bcc_too_small,	"qfsunixinfo_bcc_too_small") \
74 	EM(smb_eio_trace_qpathinfo_bcc_too_small,	"qpathinfo_bcc_too_small") \
75 	EM(smb_eio_trace_qpathinfo_invalid,		"qpathinfo_invalid") \
76 	EM(smb_eio_trace_qreparse_data_area,		"qreparse_data_area") \
77 	EM(smb_eio_trace_qreparse_rep_datalen,		"qreparse_rep_datalen") \
78 	EM(smb_eio_trace_qreparse_ret_datalen,		"qreparse_ret_datalen") \
79 	EM(smb_eio_trace_qreparse_setup_count,		"qreparse_setup_count") \
80 	EM(smb_eio_trace_qreparse_sizes_wrong,		"qreparse_sizes_wrong") \
81 	EM(smb_eio_trace_qsym_bcc_too_small,		"qsym_bcc_too_small") \
82 	EM(smb_eio_trace_read_bad_offset,		"read_bad_offset") \
83 	EM(smb_eio_trace_read_mid_state_unknown,	"read_mid_state_unknown") \
84 	EM(smb_eio_trace_read_overlarge,		"read_overlarge") \
85 	EM(smb_eio_trace_read_rsp_malformed,		"read_rsp_malformed") \
86 	EM(smb_eio_trace_read_rsp_short,		"read_rsp_short") \
87 	EM(smb_eio_trace_read_too_far,			"read_too_far") \
88 	EM(smb_eio_trace_reparse_data_len,		"reparse_data_len") \
89 	EM(smb_eio_trace_reparse_native_len,		"reparse_native_len") \
90 	EM(smb_eio_trace_reparse_native_nul,		"reparse_native_nul") \
91 	EM(smb_eio_trace_reparse_native_sym_len,	"reparse_native_sym_len") \
92 	EM(smb_eio_trace_reparse_nfs_dev,		"reparse_nfs_dev") \
93 	EM(smb_eio_trace_reparse_nfs_nul,		"reparse_nfs_nul") \
94 	EM(smb_eio_trace_reparse_nfs_sockfifo,		"reparse_nfs_sockfifo") \
95 	EM(smb_eio_trace_reparse_nfs_symbuf,		"reparse_nfs_symbuf") \
96 	EM(smb_eio_trace_reparse_nfs_too_short,		"reparse_nfs_too_short") \
97 	EM(smb_eio_trace_reparse_overlong,		"reparse_overlong") \
98 	EM(smb_eio_trace_reparse_rdlen,			"reparse_rdlen") \
99 	EM(smb_eio_trace_reparse_wsl_nul,		"reparse_wsl_nul") \
100 	EM(smb_eio_trace_reparse_wsl_symbuf,		"reparse_wsl_symbuf") \
101 	EM(smb_eio_trace_reparse_wsl_ver,		"reparse_wsl_ver") \
102 	EM(smb_eio_trace_rx_b_read_short,		"rx_b_read_short") \
103 	EM(smb_eio_trace_rx_bad_datalen,		"rx_bad_datalen") \
104 	EM(smb_eio_trace_rx_both_buf,			"rx_both_buf") \
105 	EM(smb_eio_trace_rx_calc_len_too_big,		"rx_calc_len_too_big") \
106 	EM(smb_eio_trace_rx_check_rsp,			"rx_check_rsp") \
107 	EM(smb_eio_trace_rx_copy_to_iter,		"rx_copy_to_iter") \
108 	EM(smb_eio_trace_rx_insuff_res,			"rx_insuff_res") \
109 	EM(smb_eio_trace_rx_inv_bcc,			"rx_inv_bcc") \
110 	EM(smb_eio_trace_rx_mid_unready,		"rx_mid_unready") \
111 	EM(smb_eio_trace_rx_neg_sess_resp,		"rx_neg_sess_resp") \
112 	EM(smb_eio_trace_rx_overlong,			"rx_overlong") \
113 	EM(smb_eio_trace_rx_overpage,			"rx_overpage") \
114 	EM(smb_eio_trace_rx_pos_sess_resp,		"rx_pos_sess_resp") \
115 	EM(smb_eio_trace_rx_rfc1002_magic,		"rx_rfc1002_magic") \
116 	EM(smb_eio_trace_rx_sync_mid_invalid,		"rx_sync_mid_invalid") \
117 	EM(smb_eio_trace_rx_sync_mid_malformed,		"rx_sync_mid_malformed") \
118 	EM(smb_eio_trace_rx_too_short,			"rx_too_short") \
119 	EM(smb_eio_trace_rx_trans2_extract,		"rx_trans2_extract") \
120 	EM(smb_eio_trace_rx_unknown_resp,		"rx_unknown_resp") \
121 	EM(smb_eio_trace_rx_unspec_error,		"rx_unspec_error") \
122 	EM(smb_eio_trace_sess_buf_off,			"sess_buf_off") \
123 	EM(smb_eio_trace_sess_exiting,			"sess_exiting") \
124 	EM(smb_eio_trace_sess_krb_wcc,			"sess_krb_wcc") \
125 	EM(smb_eio_trace_sess_nl2_wcc,			"sess_nl2_wcc") \
126 	EM(smb_eio_trace_sess_rawnl_auth_wcc,		"sess_rawnl_auth_wcc") \
127 	EM(smb_eio_trace_sess_rawnl_neg_wcc,		"sess_rawnl_neg_wcc") \
128 	EM(smb_eio_trace_short_symlink_write,		"short_symlink_write") \
129 	EM(smb_eio_trace_sid_too_many_auth,		"sid_too_many_auth") \
130 	EM(smb_eio_trace_sig_data_too_small,		"sig_data_too_small") \
131 	EM(smb_eio_trace_sig_iter,			"sig_iter") \
132 	EM(smb_eio_trace_smb1_received_error,		"smb1_received_error") \
133 	EM(smb_eio_trace_smb2_received_error,		"smb2_received_error") \
134 	EM(smb_eio_trace_sym_slash,			"sym_slash") \
135 	EM(smb_eio_trace_sym_target_len,		"sym_target_len") \
136 	EM(smb_eio_trace_symlink_file_size,		"symlink_file_size") \
137 	EM(smb_eio_trace_tcon_bcc_too_small,		"tcon_bcc_too_small") \
138 	EM(smb_eio_trace_tdis_in_reconnect,		"tdis_in_reconnect") \
139 	EM(smb_eio_trace_tx_chained_async,		"tx_chained_async") \
140 	EM(smb_eio_trace_tx_compress_failed,		"tx_compress_failed") \
141 	EM(smb_eio_trace_tx_copy_iter_to_buf,		"tx_copy_iter_to_buf") \
142 	EM(smb_eio_trace_tx_copy_to_buf,		"tx_copy_to_buf") \
143 	EM(smb_eio_trace_tx_max_compound,		"tx_max_compound") \
144 	EM(smb_eio_trace_tx_miscopy_to_buf,		"tx_miscopy_to_buf") \
145 	EM(smb_eio_trace_tx_need_transform,		"tx_need_transform") \
146 	EM(smb_eio_trace_tx_too_long,			"sr_too_long") \
147 	EM(smb_eio_trace_unixqfileinfo_bcc_too_small,	"unixqfileinfo_bcc_too_small") \
148 	EM(smb_eio_trace_unixqpathinfo_bcc_too_small,	"unixqpathinfo_bcc_too_small") \
149 	EM(smb_eio_trace_user_iter,			"user_iter") \
150 	EM(smb_eio_trace_write_bad_buf_type,		"write_bad_buf_type") \
151 	EM(smb_eio_trace_write_mid_state_unknown,	"write_mid_state_unknown") \
152 	EM(smb_eio_trace_write_rsp_malformed,		"write_rsp_malformed") \
153 	E_(smb_eio_trace_write_too_far,			"write_too_far")
154 
155 #define smb3_rw_credits_traces \
156 	EM(cifs_trace_rw_credits_call_readv_adjust,	"rd-call-adj") \
157 	EM(cifs_trace_rw_credits_call_writev_adjust,	"wr-call-adj") \
158 	EM(cifs_trace_rw_credits_free_subreq,		"free-subreq") \
159 	EM(cifs_trace_rw_credits_issue_read_adjust,	"rd-issu-adj") \
160 	EM(cifs_trace_rw_credits_issue_write_adjust,	"wr-issu-adj") \
161 	EM(cifs_trace_rw_credits_no_adjust_up,		"no-adj-up  ") \
162 	EM(cifs_trace_rw_credits_old_session,		"old-session") \
163 	EM(cifs_trace_rw_credits_read_response_add,	"rd-resp-add") \
164 	EM(cifs_trace_rw_credits_read_response_clear,	"rd-resp-clr") \
165 	EM(cifs_trace_rw_credits_read_resubmit,		"rd-resubmit") \
166 	EM(cifs_trace_rw_credits_read_submit,		"rd-submit  ") \
167 	EM(cifs_trace_rw_credits_write_prepare,		"wr-prepare ") \
168 	EM(cifs_trace_rw_credits_write_response_add,	"wr-resp-add") \
169 	EM(cifs_trace_rw_credits_write_response_clear,	"wr-resp-clr") \
170 	E_(cifs_trace_rw_credits_zero_in_flight,	"ZERO-IN-FLT")
171 
172 #define smb3_tcon_ref_traces					      \
173 	EM(netfs_trace_tcon_ref_free,			"FRE       ") \
174 	EM(netfs_trace_tcon_ref_free_fail,		"FRE Fail  ") \
175 	EM(netfs_trace_tcon_ref_free_ipc,		"FRE Ipc   ") \
176 	EM(netfs_trace_tcon_ref_free_ipc_fail,		"FRE Ipc-F ") \
177 	EM(netfs_trace_tcon_ref_free_reconnect_server,	"FRE Reconn") \
178 	EM(netfs_trace_tcon_ref_get_cached_laundromat,	"GET Ch-Lau") \
179 	EM(netfs_trace_tcon_ref_get_cached_lease_break,	"GET Ch-Lea") \
180 	EM(netfs_trace_tcon_ref_get_cancelled_close,	"GET Cn-Cls") \
181 	EM(netfs_trace_tcon_ref_get_close_defer_files,	"GET Cl-Def") \
182 	EM(netfs_trace_tcon_ref_get_dfs_refer,		"GET DfsRef") \
183 	EM(netfs_trace_tcon_ref_get_find,		"GET Find  ") \
184 	EM(netfs_trace_tcon_ref_get_find_sess_tcon,	"GET FndSes") \
185 	EM(netfs_trace_tcon_ref_get_reconnect_server,	"GET Reconn") \
186 	EM(netfs_trace_tcon_ref_get_swn_notify,		"GET SwnNot") \
187 	EM(netfs_trace_tcon_ref_new,			"NEW       ") \
188 	EM(netfs_trace_tcon_ref_new_ipc,		"NEW Ipc   ") \
189 	EM(netfs_trace_tcon_ref_new_reconnect_server,	"NEW Reconn") \
190 	EM(netfs_trace_tcon_ref_put_cached_close,	"PUT Ch-Cls") \
191 	EM(netfs_trace_tcon_ref_put_cancelled_close,	"PUT Cn-Cls") \
192 	EM(netfs_trace_tcon_ref_put_cancelled_close_fid, "PUT Cn-Fid") \
193 	EM(netfs_trace_tcon_ref_put_cancelled_mid,	"PUT Cn-Mid") \
194 	EM(netfs_trace_tcon_ref_put_close_defer_files,	"PUT Cl-Def") \
195 	EM(netfs_trace_tcon_ref_put_mnt_ctx,		"PUT MntCtx") \
196 	EM(netfs_trace_tcon_ref_put_dfs_refer,		"PUT DfsRfr") \
197 	EM(netfs_trace_tcon_ref_put_reconnect_server,	"PUT Reconn") \
198 	EM(netfs_trace_tcon_ref_put_swn_notify,		"PUT SwnNot") \
199 	EM(netfs_trace_tcon_ref_put_tlink,		"PUT Tlink ") \
200 	EM(netfs_trace_tcon_ref_see_cancelled_close,	"SEE Cn-Cls") \
201 	EM(netfs_trace_tcon_ref_see_fscache_collision,	"SEE FV-CO!") \
202 	EM(netfs_trace_tcon_ref_see_fscache_okay,	"SEE FV-Ok ") \
203 	EM(netfs_trace_tcon_ref_see_fscache_relinq,	"SEE FV-Rlq") \
204 	E_(netfs_trace_tcon_ref_see_umount,		"SEE Umount")
205 
206 #undef EM
207 #undef E_
208 
209 /*
210  * Define those tracing enums.
211  */
212 #ifndef __SMB3_DECLARE_TRACE_ENUMS_ONCE_ONLY
213 #define __SMB3_DECLARE_TRACE_ENUMS_ONCE_ONLY
214 
215 #define EM(a, b) a,
216 #define E_(a, b) a
217 
218 enum smb_eio_trace		{ smb_eio_traces };
219 enum smb3_rw_credits_trace	{ smb3_rw_credits_traces } __mode(byte);
220 enum smb3_tcon_ref_trace	{ smb3_tcon_ref_traces } __mode(byte);
221 
222 #undef EM
223 #undef E_
224 #endif
225 
226 /*
227  * Export enum symbols via userspace.
228  */
229 #define EM(a, b) TRACE_DEFINE_ENUM(a);
230 #define E_(a, b) TRACE_DEFINE_ENUM(a);
231 
232 smb_eio_traces;
233 smb3_rw_credits_traces;
234 smb3_tcon_ref_traces;
235 
236 #undef EM
237 #undef E_
238 
239 /*
240  * Now redefine the EM() and E_() macros to map the enums to the strings that
241  * will be printed in the output.
242  */
243 #define EM(a, b)	{ a, b },
244 #define E_(a, b)	{ a, b }
245 
246 /* For logging errors in read or write */
247 DECLARE_EVENT_CLASS(smb3_rw_err_class,
248 	TP_PROTO(unsigned int rreq_debug_id,
249 		 unsigned int rreq_debug_index,
250 		 unsigned int xid,
251 		 __u64	fid,
252 		 __u32	tid,
253 		 __u64	sesid,
254 		 __u64	offset,
255 		 __u32	len,
256 		 int	rc),
257 	TP_ARGS(rreq_debug_id, rreq_debug_index,
258 		xid, fid, tid, sesid, offset, len, rc),
259 	TP_STRUCT__entry(
260 		__field(unsigned int, rreq_debug_id)
261 		__field(unsigned int, rreq_debug_index)
262 		__field(unsigned int, xid)
263 		__field(__u64, fid)
264 		__field(__u32, tid)
265 		__field(__u64, sesid)
266 		__field(__u64, offset)
267 		__field(__u32, len)
268 		__field(int, rc)
269 	),
270 	TP_fast_assign(
271 		__entry->rreq_debug_id = rreq_debug_id;
272 		__entry->rreq_debug_index = rreq_debug_index;
273 		__entry->xid = xid;
274 		__entry->fid = fid;
275 		__entry->tid = tid;
276 		__entry->sesid = sesid;
277 		__entry->offset = offset;
278 		__entry->len = len;
279 		__entry->rc = rc;
280 	),
281 	TP_printk("R=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
282 		  __entry->rreq_debug_id, __entry->rreq_debug_index,
283 		  __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
284 		  __entry->offset, __entry->len, __entry->rc)
285 )
286 
287 #define DEFINE_SMB3_RW_ERR_EVENT(name)          \
288 DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
289 	TP_PROTO(unsigned int rreq_debug_id,	\
290 		 unsigned int rreq_debug_index,		\
291 		 unsigned int xid,			\
292 		 __u64	fid,				\
293 		 __u32	tid,				\
294 		 __u64	sesid,				\
295 		 __u64	offset,				\
296 		 __u32	len,				\
297 		 int	rc),				\
298 	TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, len, rc))
299 
300 DEFINE_SMB3_RW_ERR_EVENT(read_err);
301 DEFINE_SMB3_RW_ERR_EVENT(write_err);
302 
303 /* For logging errors in other file I/O ops */
304 DECLARE_EVENT_CLASS(smb3_other_err_class,
305 	TP_PROTO(unsigned int xid,
306 		__u64	fid,
307 		__u32	tid,
308 		__u64	sesid,
309 		__u64	offset,
310 		__u32	len,
311 		int	rc),
312 	TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
313 	TP_STRUCT__entry(
314 		__field(unsigned int, xid)
315 		__field(__u64, fid)
316 		__field(__u32, tid)
317 		__field(__u64, sesid)
318 		__field(__u64, offset)
319 		__field(__u32, len)
320 		__field(int, rc)
321 	),
322 	TP_fast_assign(
323 		__entry->xid = xid;
324 		__entry->fid = fid;
325 		__entry->tid = tid;
326 		__entry->sesid = sesid;
327 		__entry->offset = offset;
328 		__entry->len = len;
329 		__entry->rc = rc;
330 	),
331 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
332 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
333 		__entry->offset, __entry->len, __entry->rc)
334 )
335 
336 #define DEFINE_SMB3_OTHER_ERR_EVENT(name)	\
337 DEFINE_EVENT(smb3_other_err_class, smb3_##name, \
338 	TP_PROTO(unsigned int xid,		\
339 		__u64	fid,			\
340 		__u32	tid,			\
341 		__u64	sesid,			\
342 		__u64	offset,			\
343 		__u32	len,			\
344 		int	rc),			\
345 	TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
346 
347 DEFINE_SMB3_OTHER_ERR_EVENT(query_dir_err);
348 DEFINE_SMB3_OTHER_ERR_EVENT(zero_err);
349 DEFINE_SMB3_OTHER_ERR_EVENT(falloc_err);
350 
351 /*
352  * For logging errors in reflink and copy_range ops e.g. smb2_copychunk_range
353  * and smb2_duplicate_extents
354  */
355 DECLARE_EVENT_CLASS(smb3_copy_range_err_class,
356 	TP_PROTO(unsigned int xid,
357 		__u64	src_fid,
358 		__u64   target_fid,
359 		__u32	tid,
360 		__u64	sesid,
361 		__u64	src_offset,
362 		__u64   target_offset,
363 		__u32	len,
364 		int	rc),
365 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len, rc),
366 	TP_STRUCT__entry(
367 		__field(unsigned int, xid)
368 		__field(__u64, src_fid)
369 		__field(__u64, target_fid)
370 		__field(__u32, tid)
371 		__field(__u64, sesid)
372 		__field(__u64, src_offset)
373 		__field(__u64, target_offset)
374 		__field(__u32, len)
375 		__field(int, rc)
376 	),
377 	TP_fast_assign(
378 		__entry->xid = xid;
379 		__entry->src_fid = src_fid;
380 		__entry->target_fid = target_fid;
381 		__entry->tid = tid;
382 		__entry->sesid = sesid;
383 		__entry->src_offset = src_offset;
384 		__entry->target_offset = target_offset;
385 		__entry->len = len;
386 		__entry->rc = rc;
387 	),
388 	TP_printk("xid=%u sid=0x%llx tid=0x%x source fid=0x%llx source offset=0x%llx target fid=0x%llx target offset=0x%llx len=0x%x rc=%d",
389 		__entry->xid, __entry->sesid, __entry->tid, __entry->target_fid,
390 		__entry->src_offset, __entry->target_fid, __entry->target_offset, __entry->len, __entry->rc)
391 )
392 
393 #define DEFINE_SMB3_COPY_RANGE_ERR_EVENT(name)	\
394 DEFINE_EVENT(smb3_copy_range_err_class, smb3_##name, \
395 	TP_PROTO(unsigned int xid,		\
396 		__u64	src_fid,		\
397 		__u64   target_fid,		\
398 		__u32	tid,			\
399 		__u64	sesid,			\
400 		__u64	src_offset,		\
401 		__u64	target_offset,		\
402 		__u32	len,			\
403 		int	rc),			\
404 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len, rc))
405 
406 DEFINE_SMB3_COPY_RANGE_ERR_EVENT(clone_err);
407 DEFINE_SMB3_COPY_RANGE_ERR_EVENT(copychunk_err);
408 
409 DECLARE_EVENT_CLASS(smb3_copy_range_done_class,
410 	TP_PROTO(unsigned int xid,
411 		__u64	src_fid,
412 		__u64   target_fid,
413 		__u32	tid,
414 		__u64	sesid,
415 		__u64	src_offset,
416 		__u64   target_offset,
417 		__u32	len),
418 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len),
419 	TP_STRUCT__entry(
420 		__field(unsigned int, xid)
421 		__field(__u64, src_fid)
422 		__field(__u64, target_fid)
423 		__field(__u32, tid)
424 		__field(__u64, sesid)
425 		__field(__u64, src_offset)
426 		__field(__u64, target_offset)
427 		__field(__u32, len)
428 	),
429 	TP_fast_assign(
430 		__entry->xid = xid;
431 		__entry->src_fid = src_fid;
432 		__entry->target_fid = target_fid;
433 		__entry->tid = tid;
434 		__entry->sesid = sesid;
435 		__entry->src_offset = src_offset;
436 		__entry->target_offset = target_offset;
437 		__entry->len = len;
438 	),
439 	TP_printk("xid=%u sid=0x%llx tid=0x%x source fid=0x%llx source offset=0x%llx target fid=0x%llx target offset=0x%llx len=0x%x",
440 		__entry->xid, __entry->sesid, __entry->tid, __entry->target_fid,
441 		__entry->src_offset, __entry->target_fid, __entry->target_offset, __entry->len)
442 )
443 
444 #define DEFINE_SMB3_COPY_RANGE_DONE_EVENT(name)	\
445 DEFINE_EVENT(smb3_copy_range_done_class, smb3_##name, \
446 	TP_PROTO(unsigned int xid,		\
447 		__u64	src_fid,		\
448 		__u64   target_fid,		\
449 		__u32	tid,			\
450 		__u64	sesid,			\
451 		__u64	src_offset,		\
452 		__u64	target_offset,		\
453 		__u32	len),			\
454 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len))
455 
456 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_enter);
457 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_enter);
458 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_done);
459 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_done);
460 
461 
462 /* For logging successful read or write */
463 DECLARE_EVENT_CLASS(smb3_rw_done_class,
464 	TP_PROTO(unsigned int rreq_debug_id,
465 		 unsigned int rreq_debug_index,
466 		 unsigned int xid,
467 		 __u64	fid,
468 		 __u32	tid,
469 		 __u64	sesid,
470 		 __u64	offset,
471 		 __u32	len),
472 	TP_ARGS(rreq_debug_id, rreq_debug_index,
473 		xid, fid, tid, sesid, offset, len),
474 	TP_STRUCT__entry(
475 		__field(unsigned int, rreq_debug_id)
476 		__field(unsigned int, rreq_debug_index)
477 		__field(unsigned int, xid)
478 		__field(__u64, fid)
479 		__field(__u32, tid)
480 		__field(__u64, sesid)
481 		__field(__u64, offset)
482 		__field(__u32, len)
483 	),
484 	TP_fast_assign(
485 		__entry->rreq_debug_id = rreq_debug_id;
486 		__entry->rreq_debug_index = rreq_debug_index;
487 		__entry->xid = xid;
488 		__entry->fid = fid;
489 		__entry->tid = tid;
490 		__entry->sesid = sesid;
491 		__entry->offset = offset;
492 		__entry->len = len;
493 	),
494 	TP_printk("R=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
495 		  __entry->rreq_debug_id, __entry->rreq_debug_index,
496 		  __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
497 		  __entry->offset, __entry->len)
498 )
499 
500 #define DEFINE_SMB3_RW_DONE_EVENT(name)         \
501 DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
502 	TP_PROTO(unsigned int rreq_debug_id,	\
503 		 unsigned int rreq_debug_index,	\
504 		 unsigned int xid,		\
505 		__u64	fid,			\
506 		__u32	tid,			\
507 		__u64	sesid,			\
508 		__u64	offset,			\
509 		__u32	len),			\
510 	TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, len))
511 
512 DEFINE_SMB3_RW_DONE_EVENT(read_enter);
513 DEFINE_SMB3_RW_DONE_EVENT(read_done);
514 DEFINE_SMB3_RW_DONE_EVENT(write_enter);
515 DEFINE_SMB3_RW_DONE_EVENT(write_done);
516 
517 /* For logging successful other op */
518 DECLARE_EVENT_CLASS(smb3_other_done_class,
519 	TP_PROTO(unsigned int xid,
520 		__u64	fid,
521 		__u32	tid,
522 		__u64	sesid,
523 		__u64	offset,
524 		__u32	len),
525 	TP_ARGS(xid, fid, tid, sesid, offset, len),
526 	TP_STRUCT__entry(
527 		__field(unsigned int, xid)
528 		__field(__u64, fid)
529 		__field(__u32, tid)
530 		__field(__u64, sesid)
531 		__field(__u64, offset)
532 		__field(__u32, len)
533 	),
534 	TP_fast_assign(
535 		__entry->xid = xid;
536 		__entry->fid = fid;
537 		__entry->tid = tid;
538 		__entry->sesid = sesid;
539 		__entry->offset = offset;
540 		__entry->len = len;
541 	),
542 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
543 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
544 		__entry->offset, __entry->len)
545 )
546 
547 #define DEFINE_SMB3_OTHER_DONE_EVENT(name)         \
548 DEFINE_EVENT(smb3_other_done_class, smb3_##name,   \
549 	TP_PROTO(unsigned int xid,		\
550 		__u64	fid,			\
551 		__u32	tid,			\
552 		__u64	sesid,			\
553 		__u64	offset,			\
554 		__u32	len),			\
555 	TP_ARGS(xid, fid, tid, sesid, offset, len))
556 
557 DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_enter);
558 DEFINE_SMB3_OTHER_DONE_EVENT(zero_enter);
559 DEFINE_SMB3_OTHER_DONE_EVENT(falloc_enter);
560 DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_done);
561 DEFINE_SMB3_OTHER_DONE_EVENT(zero_done);
562 DEFINE_SMB3_OTHER_DONE_EVENT(falloc_done);
563 
564 /* For logging successful set EOF (truncate) */
565 DECLARE_EVENT_CLASS(smb3_eof_class,
566 	TP_PROTO(unsigned int xid,
567 		__u64	fid,
568 		__u32	tid,
569 		__u64	sesid,
570 		__u64	offset),
571 	TP_ARGS(xid, fid, tid, sesid, offset),
572 	TP_STRUCT__entry(
573 		__field(unsigned int, xid)
574 		__field(__u64, fid)
575 		__field(__u32, tid)
576 		__field(__u64, sesid)
577 		__field(__u64, offset)
578 	),
579 	TP_fast_assign(
580 		__entry->xid = xid;
581 		__entry->fid = fid;
582 		__entry->tid = tid;
583 		__entry->sesid = sesid;
584 		__entry->offset = offset;
585 	),
586 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx",
587 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
588 		__entry->offset)
589 )
590 
591 #define DEFINE_SMB3_EOF_EVENT(name)         \
592 DEFINE_EVENT(smb3_eof_class, smb3_##name,   \
593 	TP_PROTO(unsigned int xid,		\
594 		__u64	fid,			\
595 		__u32	tid,			\
596 		__u64	sesid,			\
597 		__u64	offset),		\
598 	TP_ARGS(xid, fid, tid, sesid, offset))
599 
600 DEFINE_SMB3_EOF_EVENT(set_eof);
601 
602 /*
603  * For handle based calls other than read and write, and get/set info
604  */
605 DECLARE_EVENT_CLASS(smb3_fd_class,
606 	TP_PROTO(unsigned int xid,
607 		__u64	fid,
608 		__u32	tid,
609 		__u64	sesid),
610 	TP_ARGS(xid, fid, tid, sesid),
611 	TP_STRUCT__entry(
612 		__field(unsigned int, xid)
613 		__field(__u64, fid)
614 		__field(__u32, tid)
615 		__field(__u64, sesid)
616 	),
617 	TP_fast_assign(
618 		__entry->xid = xid;
619 		__entry->fid = fid;
620 		__entry->tid = tid;
621 		__entry->sesid = sesid;
622 	),
623 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx",
624 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid)
625 )
626 
627 #define DEFINE_SMB3_FD_EVENT(name)          \
628 DEFINE_EVENT(smb3_fd_class, smb3_##name,    \
629 	TP_PROTO(unsigned int xid,		\
630 		__u64	fid,			\
631 		__u32	tid,			\
632 		__u64	sesid),			\
633 	TP_ARGS(xid, fid, tid, sesid))
634 
635 DEFINE_SMB3_FD_EVENT(flush_enter);
636 DEFINE_SMB3_FD_EVENT(flush_done);
637 DEFINE_SMB3_FD_EVENT(close_enter);
638 DEFINE_SMB3_FD_EVENT(close_done);
639 DEFINE_SMB3_FD_EVENT(oplock_not_found);
640 
641 DECLARE_EVENT_CLASS(smb3_fd_err_class,
642 	TP_PROTO(unsigned int xid,
643 		__u64	fid,
644 		__u32	tid,
645 		__u64	sesid,
646 		int	rc),
647 	TP_ARGS(xid, fid, tid, sesid, rc),
648 	TP_STRUCT__entry(
649 		__field(unsigned int, xid)
650 		__field(__u64, fid)
651 		__field(__u32, tid)
652 		__field(__u64, sesid)
653 		__field(int, rc)
654 	),
655 	TP_fast_assign(
656 		__entry->xid = xid;
657 		__entry->fid = fid;
658 		__entry->tid = tid;
659 		__entry->sesid = sesid;
660 		__entry->rc = rc;
661 	),
662 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
663 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
664 		__entry->rc)
665 )
666 
667 #define DEFINE_SMB3_FD_ERR_EVENT(name)          \
668 DEFINE_EVENT(smb3_fd_err_class, smb3_##name,    \
669 	TP_PROTO(unsigned int xid,		\
670 		__u64	fid,			\
671 		__u32	tid,			\
672 		__u64	sesid,			\
673 		int	rc),			\
674 	TP_ARGS(xid, fid, tid, sesid, rc))
675 
676 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
677 DEFINE_SMB3_FD_ERR_EVENT(close_err);
678 
679 DECLARE_EVENT_CLASS(smb3_lock_class,
680 	TP_PROTO(unsigned int xid,
681 		__u64	fid,
682 		__u32	tid,
683 		__u64	sesid,
684 		__u64	offset,
685 		__u64	len,
686 		__u32	flags,
687 		__u32	num_lock,
688 		int	rc),
689 	TP_ARGS(xid, fid, tid, sesid, offset, len, flags, num_lock, rc),
690 	TP_STRUCT__entry(
691 		__field(unsigned int, xid)
692 		__field(__u64, fid)
693 		__field(__u32, tid)
694 		__field(__u64, sesid)
695 		__field(__u64, offset)
696 		__field(__u64, len)
697 		__field(__u32, flags)
698 		__field(__u32, num_lock)
699 		__field(int, rc)
700 	),
701 	TP_fast_assign(
702 		__entry->xid = xid;
703 		__entry->fid = fid;
704 		__entry->tid = tid;
705 		__entry->sesid = sesid;
706 		__entry->offset = offset;
707 		__entry->len = len;
708 		__entry->flags = flags;
709 		__entry->num_lock = num_lock;
710 		__entry->rc = rc;
711 	),
712 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%llx flags=0x%x num_lock=%u rc=%d",
713 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
714 		__entry->offset, __entry->len, __entry->flags, __entry->num_lock,
715 		__entry->rc)
716 )
717 
718 #define DEFINE_SMB3_LOCK_EVENT(name)          \
719 DEFINE_EVENT(smb3_lock_class, smb3_##name,    \
720 	TP_PROTO(unsigned int xid,		\
721 		__u64	fid,			\
722 		__u32	tid,			\
723 		__u64	sesid,			\
724 		__u64	offset,			\
725 		__u64	len,			\
726 		__u32	flags,			\
727 		__u32	num_lock,		\
728 		int	rc),			\
729 	TP_ARGS(xid, fid, tid, sesid, offset, len, flags, num_lock, rc))
730 
731 DEFINE_SMB3_LOCK_EVENT(lock_enter);
732 DEFINE_SMB3_LOCK_EVENT(lock_done);
733 DEFINE_SMB3_LOCK_EVENT(lock_err);
734 DEFINE_SMB3_LOCK_EVENT(lock_cached);
735 
736 TRACE_EVENT(smb3_lock_conflict,
737 	TP_PROTO(__u64 fid,
738 		__u64 req_offset,
739 		__u64 req_len,
740 		__u8 req_type,
741 		__u64 conf_offset,
742 		__u64 conf_len,
743 		__u16 conf_type,
744 		__u32 conf_pid),
745 	TP_ARGS(fid, req_offset, req_len, req_type, conf_offset, conf_len, conf_type, conf_pid),
746 	TP_STRUCT__entry(
747 		__field(__u64, fid)
748 		__field(__u64, req_offset)
749 		__field(__u64, req_len)
750 		__field(__u8, req_type)
751 		__field(__u64, conf_offset)
752 		__field(__u64, conf_len)
753 		__field(__u16, conf_type)
754 		__field(__u32, conf_pid)
755 	),
756 	TP_fast_assign(
757 		__entry->fid = fid;
758 		__entry->req_offset = req_offset;
759 		__entry->req_len = req_len;
760 		__entry->req_type = req_type;
761 		__entry->conf_offset = conf_offset;
762 		__entry->conf_len = conf_len;
763 		__entry->conf_type = conf_type;
764 		__entry->conf_pid = conf_pid;
765 	),
766 	TP_printk("fid=0x%llx req=[0x%llx:0x%llx] type=0x%x conflicts with [0x%llx:0x%llx] type=0x%x pid=%u",
767 		__entry->fid, __entry->req_offset, __entry->req_len, __entry->req_type,
768 		__entry->conf_offset, __entry->conf_len, __entry->conf_type, __entry->conf_pid)
769 );
770 
771 /*
772  * For handle based query/set info calls
773  */
774 DECLARE_EVENT_CLASS(smb3_inf_enter_class,
775 	TP_PROTO(unsigned int xid,
776 		__u64	fid,
777 		__u32	tid,
778 		__u64	sesid,
779 		__u8	infclass,
780 		__u32	type),
781 	TP_ARGS(xid, fid, tid, sesid, infclass, type),
782 	TP_STRUCT__entry(
783 		__field(unsigned int, xid)
784 		__field(__u64, fid)
785 		__field(__u32, tid)
786 		__field(__u64, sesid)
787 		__field(__u8, infclass)
788 		__field(__u32, type)
789 	),
790 	TP_fast_assign(
791 		__entry->xid = xid;
792 		__entry->fid = fid;
793 		__entry->tid = tid;
794 		__entry->sesid = sesid;
795 		__entry->infclass = infclass;
796 		__entry->type = type;
797 	),
798 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x",
799 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
800 		__entry->infclass, __entry->type)
801 )
802 
803 #define DEFINE_SMB3_INF_ENTER_EVENT(name)          \
804 DEFINE_EVENT(smb3_inf_enter_class, smb3_##name,    \
805 	TP_PROTO(unsigned int xid,		\
806 		__u64	fid,			\
807 		__u32	tid,			\
808 		__u64	sesid,			\
809 		__u8	infclass,		\
810 		__u32	type),			\
811 	TP_ARGS(xid, fid, tid, sesid, infclass, type))
812 
813 DEFINE_SMB3_INF_ENTER_EVENT(query_info_enter);
814 DEFINE_SMB3_INF_ENTER_EVENT(query_info_done);
815 DEFINE_SMB3_INF_ENTER_EVENT(notify_enter);
816 DEFINE_SMB3_INF_ENTER_EVENT(notify_done);
817 
818 DECLARE_EVENT_CLASS(smb3_inf_err_class,
819 	TP_PROTO(unsigned int xid,
820 		__u64	fid,
821 		__u32	tid,
822 		__u64	sesid,
823 		__u8	infclass,
824 		__u32	type,
825 		int	rc),
826 	TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
827 	TP_STRUCT__entry(
828 		__field(unsigned int, xid)
829 		__field(__u64, fid)
830 		__field(__u32, tid)
831 		__field(__u64, sesid)
832 		__field(__u8, infclass)
833 		__field(__u32, type)
834 		__field(int, rc)
835 	),
836 	TP_fast_assign(
837 		__entry->xid = xid;
838 		__entry->fid = fid;
839 		__entry->tid = tid;
840 		__entry->sesid = sesid;
841 		__entry->infclass = infclass;
842 		__entry->type = type;
843 		__entry->rc = rc;
844 	),
845 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
846 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
847 		__entry->infclass, __entry->type, __entry->rc)
848 )
849 
850 #define DEFINE_SMB3_INF_ERR_EVENT(name)          \
851 DEFINE_EVENT(smb3_inf_err_class, smb3_##name,    \
852 	TP_PROTO(unsigned int xid,		\
853 		__u64	fid,			\
854 		__u32	tid,			\
855 		__u64	sesid,			\
856 		__u8	infclass,		\
857 		__u32	type,			\
858 		int	rc),			\
859 	TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
860 
861 DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
862 DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
863 DEFINE_SMB3_INF_ERR_EVENT(notify_err);
864 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
865 
866 DECLARE_EVENT_CLASS(smb3_inf_compound_enter_class,
867 	TP_PROTO(unsigned int xid,
868 		__u32	tid,
869 		__u64	sesid,
870 		const char *full_path),
871 	TP_ARGS(xid, tid, sesid, full_path),
872 	TP_STRUCT__entry(
873 		__field(unsigned int, xid)
874 		__field(__u32, tid)
875 		__field(__u64, sesid)
876 		__string(path, full_path)
877 	),
878 	TP_fast_assign(
879 		__entry->xid = xid;
880 		__entry->tid = tid;
881 		__entry->sesid = sesid;
882 		__assign_str(path);
883 	),
884 	TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s",
885 		__entry->xid, __entry->sesid, __entry->tid,
886 		__get_str(path))
887 )
888 
889 #define DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(name)     \
890 DEFINE_EVENT(smb3_inf_compound_enter_class, smb3_##name,    \
891 	TP_PROTO(unsigned int xid,		\
892 		__u32	tid,			\
893 		__u64	sesid,			\
894 		const char *full_path),		\
895 	TP_ARGS(xid, tid, sesid, full_path))
896 
897 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_info_compound_enter);
898 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(posix_query_info_compound_enter);
899 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(hardlink_enter);
900 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rename_enter);
901 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(unlink_enter);
902 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_eof_enter);
903 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_info_compound_enter);
904 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_reparse_compound_enter);
905 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(get_reparse_compound_enter);
906 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_wsl_ea_compound_enter);
907 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mkdir_enter);
908 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(tdis_enter);
909 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mknod_enter);
910 
911 DECLARE_EVENT_CLASS(smb3_inf_compound_done_class,
912 	TP_PROTO(unsigned int xid,
913 		__u32	tid,
914 		__u64	sesid),
915 	TP_ARGS(xid, tid, sesid),
916 	TP_STRUCT__entry(
917 		__field(unsigned int, xid)
918 		__field(__u32, tid)
919 		__field(__u64, sesid)
920 	),
921 	TP_fast_assign(
922 		__entry->xid = xid;
923 		__entry->tid = tid;
924 		__entry->sesid = sesid;
925 	),
926 	TP_printk("xid=%u sid=0x%llx tid=0x%x",
927 		__entry->xid, __entry->sesid, __entry->tid)
928 )
929 
930 #define DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(name)     \
931 DEFINE_EVENT(smb3_inf_compound_done_class, smb3_##name,    \
932 	TP_PROTO(unsigned int xid,		\
933 		__u32	tid,			\
934 		__u64	sesid),			\
935 	TP_ARGS(xid, tid, sesid))
936 
937 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_info_compound_done);
938 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(posix_query_info_compound_done);
939 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(hardlink_done);
940 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rename_done);
941 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(unlink_done);
942 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_eof_done);
943 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_info_compound_done);
944 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_reparse_compound_done);
945 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(get_reparse_compound_done);
946 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_wsl_ea_compound_done);
947 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mkdir_done);
948 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(tdis_done);
949 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mknod_done);
950 
951 DECLARE_EVENT_CLASS(smb3_inf_compound_err_class,
952 	TP_PROTO(unsigned int xid,
953 		__u32	tid,
954 		__u64	sesid,
955 		int	rc),
956 	TP_ARGS(xid, tid, sesid, rc),
957 	TP_STRUCT__entry(
958 		__field(unsigned int, xid)
959 		__field(__u32, tid)
960 		__field(__u64, sesid)
961 		__field(int, rc)
962 	),
963 	TP_fast_assign(
964 		__entry->xid = xid;
965 		__entry->tid = tid;
966 		__entry->sesid = sesid;
967 		__entry->rc = rc;
968 	),
969 	TP_printk("xid=%u sid=0x%llx tid=0x%x rc=%d",
970 		__entry->xid, __entry->sesid, __entry->tid,
971 		__entry->rc)
972 )
973 
974 #define DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(name)     \
975 DEFINE_EVENT(smb3_inf_compound_err_class, smb3_##name,    \
976 	TP_PROTO(unsigned int xid,		\
977 		__u32	tid,			\
978 		__u64	sesid,			\
979 		int rc),			\
980 	TP_ARGS(xid, tid, sesid, rc))
981 
982 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_info_compound_err);
983 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(posix_query_info_compound_err);
984 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(hardlink_err);
985 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rename_err);
986 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(unlink_err);
987 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_eof_err);
988 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_info_compound_err);
989 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_reparse_compound_err);
990 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(get_reparse_compound_err);
991 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_wsl_ea_compound_err);
992 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mkdir_err);
993 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(tdis_err);
994 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mknod_err);
995 
996 /*
997  * For logging SMB3 Status code and Command for responses which return errors
998  */
999 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
1000 	TP_PROTO(__u32	tid,
1001 		__u64	sesid,
1002 		__u16	cmd,
1003 		__u64	mid,
1004 		__u32	status,
1005 		int	rc),
1006 	TP_ARGS(tid, sesid, cmd, mid, status, rc),
1007 	TP_STRUCT__entry(
1008 		__field(__u32, tid)
1009 		__field(__u64, sesid)
1010 		__field(__u16, cmd)
1011 		__field(__u64, mid)
1012 		__field(__u32, status)
1013 		__field(int, rc)
1014 	),
1015 	TP_fast_assign(
1016 		__entry->tid = tid;
1017 		__entry->sesid = sesid;
1018 		__entry->cmd = cmd;
1019 		__entry->mid = mid;
1020 		__entry->status = status;
1021 		__entry->rc = rc;
1022 	),
1023 	TP_printk("sid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
1024 		__entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
1025 		__entry->status, __entry->rc)
1026 )
1027 
1028 #define DEFINE_SMB3_CMD_ERR_EVENT(name)          \
1029 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name,    \
1030 	TP_PROTO(__u32	tid,			\
1031 		__u64	sesid,			\
1032 		__u16	cmd,			\
1033 		__u64	mid,			\
1034 		__u32	status,			\
1035 		int	rc),			\
1036 	TP_ARGS(tid, sesid, cmd, mid, status, rc))
1037 
1038 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
1039 
1040 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
1041 	TP_PROTO(__u32	tid,
1042 		__u64	sesid,
1043 		__u16	cmd,
1044 		__u64	mid),
1045 	TP_ARGS(tid, sesid, cmd, mid),
1046 	TP_STRUCT__entry(
1047 		__field(__u32, tid)
1048 		__field(__u64, sesid)
1049 		__field(__u16, cmd)
1050 		__field(__u64, mid)
1051 	),
1052 	TP_fast_assign(
1053 		__entry->tid = tid;
1054 		__entry->sesid = sesid;
1055 		__entry->cmd = cmd;
1056 		__entry->mid = mid;
1057 	),
1058 	TP_printk("sid=0x%llx tid=0x%x cmd=%u mid=%llu",
1059 		__entry->sesid, __entry->tid,
1060 		__entry->cmd, __entry->mid)
1061 )
1062 
1063 #define DEFINE_SMB3_CMD_DONE_EVENT(name)          \
1064 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name,    \
1065 	TP_PROTO(__u32	tid,			\
1066 		__u64	sesid,			\
1067 		__u16	cmd,			\
1068 		__u64	mid),			\
1069 	TP_ARGS(tid, sesid, cmd, mid))
1070 
1071 DEFINE_SMB3_CMD_DONE_EVENT(cmd_enter);
1072 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
1073 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
1074 
1075 DECLARE_EVENT_CLASS(smb3_mid_class,
1076 	TP_PROTO(__u16	cmd,
1077 		__u64	mid,
1078 		__u32	pid,
1079 		unsigned long when_sent,
1080 		unsigned long when_received),
1081 	TP_ARGS(cmd, mid, pid, when_sent, when_received),
1082 	TP_STRUCT__entry(
1083 		__field(__u16, cmd)
1084 		__field(__u64, mid)
1085 		__field(__u32, pid)
1086 		__field(unsigned long, when_sent)
1087 		__field(unsigned long, when_received)
1088 	),
1089 	TP_fast_assign(
1090 		__entry->cmd = cmd;
1091 		__entry->mid = mid;
1092 		__entry->pid = pid;
1093 		__entry->when_sent = when_sent;
1094 		__entry->when_received = when_received;
1095 	),
1096 	TP_printk("cmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
1097 		__entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
1098 		__entry->when_received)
1099 )
1100 
1101 #define DEFINE_SMB3_MID_EVENT(name)          \
1102 DEFINE_EVENT(smb3_mid_class, smb3_##name,    \
1103 	TP_PROTO(__u16	cmd,			\
1104 		__u64	mid,			\
1105 		__u32	pid,			\
1106 		unsigned long when_sent,	\
1107 		unsigned long when_received),	\
1108 	TP_ARGS(cmd, mid, pid, when_sent, when_received))
1109 
1110 DEFINE_SMB3_MID_EVENT(slow_rsp);
1111 
1112 DECLARE_EVENT_CLASS(smb3_exit_err_class,
1113 	TP_PROTO(unsigned int xid,
1114 		const char *func_name,
1115 		int	rc),
1116 	TP_ARGS(xid, func_name, rc),
1117 	TP_STRUCT__entry(
1118 		__field(unsigned int, xid)
1119 		__string(func_name, func_name)
1120 		__field(int, rc)
1121 	),
1122 	TP_fast_assign(
1123 		__entry->xid = xid;
1124 		__assign_str(func_name);
1125 		__entry->rc = rc;
1126 	),
1127 	TP_printk("%s: xid=%u rc=%d",
1128 		__get_str(func_name), __entry->xid, __entry->rc)
1129 )
1130 
1131 #define DEFINE_SMB3_EXIT_ERR_EVENT(name)          \
1132 DEFINE_EVENT(smb3_exit_err_class, smb3_##name,    \
1133 	TP_PROTO(unsigned int xid,		\
1134 		const char *func_name,		\
1135 		int	rc),			\
1136 	TP_ARGS(xid, func_name, rc))
1137 
1138 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
1139 
1140 
1141 DECLARE_EVENT_CLASS(smb3_sync_err_class,
1142 	TP_PROTO(unsigned long ino,
1143 		int	rc),
1144 	TP_ARGS(ino, rc),
1145 	TP_STRUCT__entry(
1146 		__field(unsigned long, ino)
1147 		__field(int, rc)
1148 	),
1149 	TP_fast_assign(
1150 		__entry->ino = ino;
1151 		__entry->rc = rc;
1152 	),
1153 	TP_printk("ino=%lu rc=%d",
1154 		__entry->ino, __entry->rc)
1155 )
1156 
1157 #define DEFINE_SMB3_SYNC_ERR_EVENT(name)          \
1158 DEFINE_EVENT(smb3_sync_err_class, cifs_##name,    \
1159 	TP_PROTO(unsigned long ino,		\
1160 		int	rc),			\
1161 	TP_ARGS(ino, rc))
1162 
1163 DEFINE_SMB3_SYNC_ERR_EVENT(fsync_err);
1164 DEFINE_SMB3_SYNC_ERR_EVENT(flush_err);
1165 
1166 
1167 DECLARE_EVENT_CLASS(smb3_enter_exit_class,
1168 	TP_PROTO(unsigned int xid,
1169 		const char *func_name),
1170 	TP_ARGS(xid, func_name),
1171 	TP_STRUCT__entry(
1172 		__field(unsigned int, xid)
1173 		__string(func_name, func_name)
1174 	),
1175 	TP_fast_assign(
1176 		__entry->xid = xid;
1177 		__assign_str(func_name);
1178 	),
1179 	TP_printk("%s: xid=%u",
1180 		__get_str(func_name), __entry->xid)
1181 )
1182 
1183 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name)        \
1184 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name,  \
1185 	TP_PROTO(unsigned int xid,		\
1186 		const char *func_name),		\
1187 	TP_ARGS(xid, func_name))
1188 
1189 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
1190 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
1191 
1192 /*
1193  * For SMB2/SMB3 tree connect
1194  */
1195 
1196 DECLARE_EVENT_CLASS(smb3_tcon_class,
1197 	TP_PROTO(unsigned int xid,
1198 		__u32	tid,
1199 		__u64	sesid,
1200 		const char *unc_name,
1201 		int	rc),
1202 	TP_ARGS(xid, tid, sesid, unc_name, rc),
1203 	TP_STRUCT__entry(
1204 		__field(unsigned int, xid)
1205 		__field(__u32, tid)
1206 		__field(__u64, sesid)
1207 		__string(name, unc_name)
1208 		__field(int, rc)
1209 	),
1210 	TP_fast_assign(
1211 		__entry->xid = xid;
1212 		__entry->tid = tid;
1213 		__entry->sesid = sesid;
1214 		__assign_str(name);
1215 		__entry->rc = rc;
1216 	),
1217 	TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d",
1218 		__entry->xid, __entry->sesid, __entry->tid,
1219 		__get_str(name), __entry->rc)
1220 )
1221 
1222 #define DEFINE_SMB3_TCON_EVENT(name)          \
1223 DEFINE_EVENT(smb3_tcon_class, smb3_##name,    \
1224 	TP_PROTO(unsigned int xid,		\
1225 		__u32	tid,			\
1226 		__u64	sesid,			\
1227 		const char *unc_name,		\
1228 		int	rc),			\
1229 	TP_ARGS(xid, tid, sesid, unc_name, rc))
1230 
1231 DEFINE_SMB3_TCON_EVENT(tcon);
1232 DEFINE_SMB3_TCON_EVENT(qfs_done);
1233 
1234 /*
1235  * For smb2/smb3 open (including create and mkdir) calls
1236  */
1237 
1238 DECLARE_EVENT_CLASS(smb3_open_enter_class,
1239 	TP_PROTO(unsigned int xid,
1240 		__u32	tid,
1241 		__u64	sesid,
1242 		const char *full_path,
1243 		int	create_options,
1244 		int	desired_access),
1245 	TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access),
1246 	TP_STRUCT__entry(
1247 		__field(unsigned int, xid)
1248 		__field(__u32, tid)
1249 		__field(__u64, sesid)
1250 		__string(path, full_path)
1251 		__field(int, create_options)
1252 		__field(int, desired_access)
1253 	),
1254 	TP_fast_assign(
1255 		__entry->xid = xid;
1256 		__entry->tid = tid;
1257 		__entry->sesid = sesid;
1258 		__assign_str(path);
1259 		__entry->create_options = create_options;
1260 		__entry->desired_access = desired_access;
1261 	),
1262 	TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s cr_opts=0x%x des_access=0x%x",
1263 		__entry->xid, __entry->sesid, __entry->tid, __get_str(path),
1264 		__entry->create_options, __entry->desired_access)
1265 )
1266 
1267 #define DEFINE_SMB3_OPEN_ENTER_EVENT(name)        \
1268 DEFINE_EVENT(smb3_open_enter_class, smb3_##name,  \
1269 	TP_PROTO(unsigned int xid,		\
1270 		__u32	tid,			\
1271 		__u64	sesid,			\
1272 		const char *full_path,		\
1273 		int	create_options,		\
1274 		int	desired_access),	\
1275 	TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access))
1276 
1277 DEFINE_SMB3_OPEN_ENTER_EVENT(open_enter);
1278 DEFINE_SMB3_OPEN_ENTER_EVENT(posix_mkdir_enter);
1279 
1280 DECLARE_EVENT_CLASS(smb3_open_err_class,
1281 	TP_PROTO(unsigned int xid,
1282 		__u32	tid,
1283 		__u64	sesid,
1284 		int	create_options,
1285 		int	desired_access,
1286 		int	rc),
1287 	TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
1288 	TP_STRUCT__entry(
1289 		__field(unsigned int, xid)
1290 		__field(__u32, tid)
1291 		__field(__u64, sesid)
1292 		__field(int,   create_options)
1293 		__field(int, desired_access)
1294 		__field(int, rc)
1295 	),
1296 	TP_fast_assign(
1297 		__entry->xid = xid;
1298 		__entry->tid = tid;
1299 		__entry->sesid = sesid;
1300 		__entry->create_options = create_options;
1301 		__entry->desired_access = desired_access;
1302 		__entry->rc = rc;
1303 	),
1304 	TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
1305 		__entry->xid, __entry->sesid, __entry->tid,
1306 		__entry->create_options, __entry->desired_access, __entry->rc)
1307 )
1308 
1309 #define DEFINE_SMB3_OPEN_ERR_EVENT(name)          \
1310 DEFINE_EVENT(smb3_open_err_class, smb3_##name,    \
1311 	TP_PROTO(unsigned int xid,		\
1312 		__u32	tid,			\
1313 		__u64	sesid,			\
1314 		int	create_options,		\
1315 		int	desired_access,		\
1316 		int	rc),			\
1317 	TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
1318 
1319 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
1320 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
1321 
1322 DECLARE_EVENT_CLASS(smb3_open_done_class,
1323 	TP_PROTO(unsigned int xid,
1324 		__u64	fid,
1325 		__u32	tid,
1326 		__u64	sesid,
1327 		int	create_options,
1328 		int	desired_access,
1329 		__u8	oplock),
1330 	TP_ARGS(xid, fid, tid, sesid, create_options, desired_access, oplock),
1331 	TP_STRUCT__entry(
1332 		__field(unsigned int, xid)
1333 		__field(__u64, fid)
1334 		__field(__u32, tid)
1335 		__field(__u64, sesid)
1336 		__field(int, create_options)
1337 		__field(int, desired_access)
1338 		__field(__u8, oplock)
1339 	),
1340 	TP_fast_assign(
1341 		__entry->xid = xid;
1342 		__entry->fid = fid;
1343 		__entry->tid = tid;
1344 		__entry->sesid = sesid;
1345 		__entry->create_options = create_options;
1346 		__entry->desired_access = desired_access;
1347 		__entry->oplock = oplock;
1348 	),
1349 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x oplock=0x%x",
1350 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
1351 		__entry->create_options, __entry->desired_access, __entry->oplock)
1352 )
1353 
1354 #define DEFINE_SMB3_OPEN_DONE_EVENT(name)        \
1355 DEFINE_EVENT(smb3_open_done_class, smb3_##name,  \
1356 	TP_PROTO(unsigned int xid,		\
1357 		__u64	fid,			\
1358 		__u32	tid,			\
1359 		__u64	sesid,			\
1360 		int	create_options,		\
1361 		int	desired_access,		\
1362 		__u8	oplock),		\
1363 	TP_ARGS(xid, fid, tid, sesid, create_options, desired_access, oplock))
1364 
1365 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
1366 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
1367 
1368 TRACE_EVENT(smb3_open_cached,
1369 	TP_PROTO(unsigned int xid,
1370 		__u32 tid,
1371 		__u64 sesid,
1372 		__u64 fid,
1373 		unsigned int oflags,
1374 		unsigned int cflags),
1375 	TP_ARGS(xid, tid, sesid, fid, oflags, cflags),
1376 	TP_STRUCT__entry(
1377 		__field(unsigned int, xid)
1378 		__field(__u32, tid)
1379 		__field(__u64, sesid)
1380 		__field(__u64, fid)
1381 		__field(unsigned int, oflags)
1382 		__field(unsigned int, cflags)
1383 	),
1384 	TP_fast_assign(
1385 		__entry->xid = xid;
1386 		__entry->tid = tid;
1387 		__entry->sesid = sesid;
1388 		__entry->fid = fid;
1389 		__entry->oflags = oflags;
1390 		__entry->cflags = cflags;
1391 	),
1392 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx oflags=0x%x cflags=0x%x",
1393 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
1394 		__entry->oflags, __entry->cflags)
1395 );
1396 
1397 TRACE_EVENT(smb3_close_cached,
1398 	TP_PROTO(__u32 tid,
1399 		__u64 sesid,
1400 		__u64 fid,
1401 		unsigned long delay_jiffies),
1402 	TP_ARGS(tid, sesid, fid, delay_jiffies),
1403 	TP_STRUCT__entry(
1404 		__field(__u32, tid)
1405 		__field(__u64, sesid)
1406 		__field(__u64, fid)
1407 		__field(unsigned long, delay_jiffies)
1408 	),
1409 	TP_fast_assign(
1410 		__entry->tid = tid;
1411 		__entry->sesid = sesid;
1412 		__entry->fid = fid;
1413 		__entry->delay_jiffies = delay_jiffies;
1414 	),
1415 	TP_printk("sid=0x%llx tid=0x%x fid=0x%llx delay_jiffies=%lu",
1416 		__entry->sesid, __entry->tid, __entry->fid, __entry->delay_jiffies)
1417 );
1418 
1419 
1420 DECLARE_EVENT_CLASS(smb3_lease_done_class,
1421 	TP_PROTO(__u32	lease_state,
1422 		__u32	tid,
1423 		__u64	sesid,
1424 		__u64	lease_key_low,
1425 		__u64	lease_key_high),
1426 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
1427 	TP_STRUCT__entry(
1428 		__field(__u32, lease_state)
1429 		__field(__u32, tid)
1430 		__field(__u64, sesid)
1431 		__field(__u64, lease_key_low)
1432 		__field(__u64, lease_key_high)
1433 	),
1434 	TP_fast_assign(
1435 		__entry->lease_state = lease_state;
1436 		__entry->tid = tid;
1437 		__entry->sesid = sesid;
1438 		__entry->lease_key_low = lease_key_low;
1439 		__entry->lease_key_high = lease_key_high;
1440 	),
1441 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
1442 		__entry->sesid, __entry->tid, __entry->lease_key_high,
1443 		__entry->lease_key_low, __entry->lease_state)
1444 )
1445 
1446 #define DEFINE_SMB3_LEASE_DONE_EVENT(name)        \
1447 DEFINE_EVENT(smb3_lease_done_class, smb3_##name,  \
1448 	TP_PROTO(__u32	lease_state,		\
1449 		__u32	tid,			\
1450 		__u64	sesid,			\
1451 		__u64	lease_key_low,		\
1452 		__u64	lease_key_high),	\
1453 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
1454 
1455 DEFINE_SMB3_LEASE_DONE_EVENT(lease_ack_done);
1456 /* Tracepoint when a lease break request is received/entered (includes epoch and flags) */
1457 DECLARE_EVENT_CLASS(smb3_lease_enter_class,
1458 	TP_PROTO(__u32 lease_state,
1459 		__u32 flags,
1460 		__u16 epoch,
1461 		__u32 tid,
1462 		__u64 sesid,
1463 		__u64 lease_key_low,
1464 		__u64 lease_key_high),
1465 	TP_ARGS(lease_state, flags, epoch, tid, sesid, lease_key_low, lease_key_high),
1466 	TP_STRUCT__entry(
1467 		__field(__u32, lease_state)
1468 		__field(__u32, flags)
1469 		__field(__u16, epoch)
1470 		__field(__u32, tid)
1471 		__field(__u64, sesid)
1472 		__field(__u64, lease_key_low)
1473 		__field(__u64, lease_key_high)
1474 	),
1475 	TP_fast_assign(
1476 		__entry->lease_state = lease_state;
1477 		__entry->flags = flags;
1478 		__entry->epoch = epoch;
1479 		__entry->tid = tid;
1480 		__entry->sesid = sesid;
1481 		__entry->lease_key_low = lease_key_low;
1482 		__entry->lease_key_high = lease_key_high;
1483 	),
1484 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x flags=0x%x epoch=%u",
1485 		__entry->sesid, __entry->tid, __entry->lease_key_high,
1486 		__entry->lease_key_low, __entry->lease_state, __entry->flags, __entry->epoch)
1487 )
1488 
1489 #define DEFINE_SMB3_LEASE_ENTER_EVENT(name)        \
1490 DEFINE_EVENT(smb3_lease_enter_class, smb3_##name,  \
1491 	TP_PROTO(__u32 lease_state,            \
1492 		__u32 flags,               \
1493 		__u16 epoch,               \
1494 		__u32 tid,                 \
1495 		__u64 sesid,               \
1496 		__u64 lease_key_low,       \
1497 		__u64 lease_key_high),     \
1498 	TP_ARGS(lease_state, flags, epoch, tid, sesid, lease_key_low, lease_key_high))
1499 
1500 DEFINE_SMB3_LEASE_ENTER_EVENT(lease_break_enter);
1501 /* Lease not found: reuse lease_enter payload (includes epoch and flags) */
1502 DEFINE_SMB3_LEASE_ENTER_EVENT(lease_not_found);
1503 
1504 DECLARE_EVENT_CLASS(smb3_lease_err_class,
1505 	TP_PROTO(__u32	lease_state,
1506 		__u32	tid,
1507 		__u64	sesid,
1508 		__u64	lease_key_low,
1509 		__u64	lease_key_high,
1510 		int	rc),
1511 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
1512 	TP_STRUCT__entry(
1513 		__field(__u32, lease_state)
1514 		__field(__u32, tid)
1515 		__field(__u64, sesid)
1516 		__field(__u64, lease_key_low)
1517 		__field(__u64, lease_key_high)
1518 		__field(int, rc)
1519 	),
1520 	TP_fast_assign(
1521 		__entry->lease_state = lease_state;
1522 		__entry->tid = tid;
1523 		__entry->sesid = sesid;
1524 		__entry->lease_key_low = lease_key_low;
1525 		__entry->lease_key_high = lease_key_high;
1526 		__entry->rc = rc;
1527 	),
1528 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
1529 		__entry->sesid, __entry->tid, __entry->lease_key_high,
1530 		__entry->lease_key_low, __entry->lease_state, __entry->rc)
1531 )
1532 
1533 #define DEFINE_SMB3_LEASE_ERR_EVENT(name)        \
1534 DEFINE_EVENT(smb3_lease_err_class, smb3_##name,  \
1535 	TP_PROTO(__u32	lease_state,		\
1536 		__u32	tid,			\
1537 		__u64	sesid,			\
1538 		__u64	lease_key_low,		\
1539 		__u64	lease_key_high,		\
1540 		int	rc),			\
1541 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
1542 
1543 DEFINE_SMB3_LEASE_ERR_EVENT(lease_ack_err);
1544 
1545 DECLARE_EVENT_CLASS(smb3_connect_class,
1546 	TP_PROTO(char *hostname,
1547 		__u64 conn_id,
1548 		const struct __kernel_sockaddr_storage *dst_addr),
1549 	TP_ARGS(hostname, conn_id, dst_addr),
1550 	TP_STRUCT__entry(
1551 		__string(hostname, hostname)
1552 		__field(__u64, conn_id)
1553 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1554 	),
1555 	TP_fast_assign(
1556 		struct sockaddr_storage *pss = NULL;
1557 
1558 		__entry->conn_id = conn_id;
1559 		pss = (struct sockaddr_storage *)__entry->dst_addr;
1560 		*pss = *dst_addr;
1561 		__assign_str(hostname);
1562 	),
1563 	TP_printk("conn_id=0x%llx server=%s addr=%pISpsfc",
1564 		__entry->conn_id,
1565 		__get_str(hostname),
1566 		__entry->dst_addr)
1567 )
1568 
1569 #define DEFINE_SMB3_CONNECT_EVENT(name)        \
1570 DEFINE_EVENT(smb3_connect_class, smb3_##name,  \
1571 	TP_PROTO(char *hostname,		\
1572 		__u64 conn_id,			\
1573 		const struct __kernel_sockaddr_storage *addr),	\
1574 	TP_ARGS(hostname, conn_id, addr))
1575 
1576 DEFINE_SMB3_CONNECT_EVENT(connect_done);
1577 DEFINE_SMB3_CONNECT_EVENT(smbd_connect_done);
1578 DEFINE_SMB3_CONNECT_EVENT(smbd_connect_err);
1579 
1580 DECLARE_EVENT_CLASS(smb3_connect_err_class,
1581 	TP_PROTO(char *hostname, __u64 conn_id,
1582 		const struct __kernel_sockaddr_storage *dst_addr, int rc),
1583 	TP_ARGS(hostname, conn_id, dst_addr, rc),
1584 	TP_STRUCT__entry(
1585 		__string(hostname, hostname)
1586 		__field(__u64, conn_id)
1587 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1588 		__field(int, rc)
1589 	),
1590 	TP_fast_assign(
1591 		struct sockaddr_storage *pss = NULL;
1592 
1593 		__entry->conn_id = conn_id;
1594 		__entry->rc = rc;
1595 		pss = (struct sockaddr_storage *)__entry->dst_addr;
1596 		*pss = *dst_addr;
1597 		__assign_str(hostname);
1598 	),
1599 	TP_printk("rc=%d conn_id=0x%llx server=%s addr=%pISpsfc",
1600 		__entry->rc,
1601 		__entry->conn_id,
1602 		__get_str(hostname),
1603 		__entry->dst_addr)
1604 )
1605 
1606 #define DEFINE_SMB3_CONNECT_ERR_EVENT(name)        \
1607 DEFINE_EVENT(smb3_connect_err_class, smb3_##name,  \
1608 	TP_PROTO(char *hostname,		\
1609 		__u64 conn_id,			\
1610 		const struct __kernel_sockaddr_storage *addr,	\
1611 		int rc),			\
1612 	TP_ARGS(hostname, conn_id, addr, rc))
1613 
1614 DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
1615 
1616 DECLARE_EVENT_CLASS(smb3_sess_setup_err_class,
1617 	TP_PROTO(char *hostname, char *username, __u64 conn_id,
1618 		const struct __kernel_sockaddr_storage *dst_addr, int rc),
1619 	TP_ARGS(hostname, username, conn_id, dst_addr, rc),
1620 	TP_STRUCT__entry(
1621 		__string(hostname, hostname)
1622 		__string(username, username)
1623 		__field(__u64, conn_id)
1624 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1625 		__field(int, rc)
1626 	),
1627 	TP_fast_assign(
1628 		struct sockaddr_storage *pss = NULL;
1629 
1630 		__entry->conn_id = conn_id;
1631 		__entry->rc = rc;
1632 		pss = (struct sockaddr_storage *)__entry->dst_addr;
1633 		*pss = *dst_addr;
1634 		__assign_str(hostname);
1635 		__assign_str(username);
1636 	),
1637 	TP_printk("rc=%d user=%s conn_id=0x%llx server=%s addr=%pISpsfc",
1638 		__entry->rc,
1639 		__get_str(username),
1640 		__entry->conn_id,
1641 		__get_str(hostname),
1642 		__entry->dst_addr)
1643 )
1644 
1645 #define DEFINE_SMB3_SES_SETUP_ERR_EVENT(name)        \
1646 DEFINE_EVENT(smb3_sess_setup_err_class, smb3_##name,  \
1647 	TP_PROTO(char *hostname,		\
1648 		char *username,			\
1649 		__u64 conn_id,			\
1650 		const struct __kernel_sockaddr_storage *addr,	\
1651 		int rc),			\
1652 	TP_ARGS(hostname, username, conn_id, addr, rc))
1653 
1654 DEFINE_SMB3_SES_SETUP_ERR_EVENT(key_expired);
1655 
1656 DECLARE_EVENT_CLASS(smb3_reconnect_class,
1657 	TP_PROTO(__u64	currmid,
1658 		__u64 conn_id,
1659 		char *hostname),
1660 	TP_ARGS(currmid, conn_id, hostname),
1661 	TP_STRUCT__entry(
1662 		__field(__u64, currmid)
1663 		__field(__u64, conn_id)
1664 		__string(hostname, hostname)
1665 	),
1666 	TP_fast_assign(
1667 		__entry->currmid = currmid;
1668 		__entry->conn_id = conn_id;
1669 		__assign_str(hostname);
1670 	),
1671 	TP_printk("conn_id=0x%llx server=%s current_mid=%llu",
1672 		__entry->conn_id,
1673 		__get_str(hostname),
1674 		__entry->currmid)
1675 )
1676 
1677 #define DEFINE_SMB3_RECONNECT_EVENT(name)        \
1678 DEFINE_EVENT(smb3_reconnect_class, smb3_##name,  \
1679 	TP_PROTO(__u64	currmid,		\
1680 		__u64 conn_id,			\
1681 		char *hostname),				\
1682 	TP_ARGS(currmid, conn_id, hostname))
1683 
1684 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
1685 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
1686 
1687 DECLARE_EVENT_CLASS(smb3_ses_class,
1688 	TP_PROTO(__u64	sesid),
1689 	TP_ARGS(sesid),
1690 	TP_STRUCT__entry(
1691 		__field(__u64, sesid)
1692 	),
1693 	TP_fast_assign(
1694 		__entry->sesid = sesid;
1695 	),
1696 	TP_printk("sid=0x%llx",
1697 		__entry->sesid)
1698 )
1699 
1700 #define DEFINE_SMB3_SES_EVENT(name)        \
1701 DEFINE_EVENT(smb3_ses_class, smb3_##name,  \
1702 	TP_PROTO(__u64	sesid),				\
1703 	TP_ARGS(sesid))
1704 
1705 DEFINE_SMB3_SES_EVENT(ses_not_found);
1706 
1707 DECLARE_EVENT_CLASS(smb3_ioctl_class,
1708 	TP_PROTO(unsigned int xid,
1709 		__u64	fid,
1710 		unsigned int command),
1711 	TP_ARGS(xid, fid, command),
1712 	TP_STRUCT__entry(
1713 		__field(unsigned int, xid)
1714 		__field(__u64, fid)
1715 		__field(unsigned int, command)
1716 	),
1717 	TP_fast_assign(
1718 		__entry->xid = xid;
1719 		__entry->fid = fid;
1720 		__entry->command = command;
1721 	),
1722 	TP_printk("xid=%u fid=0x%llx ioctl cmd=0x%x",
1723 		  __entry->xid, __entry->fid, __entry->command)
1724 )
1725 
1726 #define DEFINE_SMB3_IOCTL_EVENT(name)        \
1727 DEFINE_EVENT(smb3_ioctl_class, smb3_##name,  \
1728 	TP_PROTO(unsigned int xid,	     \
1729 		__u64 fid,		     \
1730 		unsigned int command),	     \
1731 	TP_ARGS(xid, fid, command))
1732 
1733 DEFINE_SMB3_IOCTL_EVENT(ioctl);
1734 DEFINE_SMB3_IOCTL_EVENT(unsupported_ioctl);
1735 
1736 DECLARE_EVENT_CLASS(smb3_shutdown_class,
1737 	TP_PROTO(__u32 flags,
1738 		__u32 tid),
1739 	TP_ARGS(flags, tid),
1740 	TP_STRUCT__entry(
1741 		__field(__u32, flags)
1742 		__field(__u32, tid)
1743 	),
1744 	TP_fast_assign(
1745 		__entry->flags = flags;
1746 		__entry->tid = tid;
1747 	),
1748 	TP_printk("flags=0x%x tid=0x%x",
1749 		  __entry->flags, __entry->tid)
1750 )
1751 
1752 #define DEFINE_SMB3_SHUTDOWN_EVENT(name)        \
1753 DEFINE_EVENT(smb3_shutdown_class, smb3_##name,  \
1754 	TP_PROTO(__u32 flags,		     \
1755 		__u32 tid),		     \
1756 	TP_ARGS(flags, tid))
1757 
1758 DEFINE_SMB3_SHUTDOWN_EVENT(shutdown_enter);
1759 DEFINE_SMB3_SHUTDOWN_EVENT(shutdown_done);
1760 
1761 DECLARE_EVENT_CLASS(smb3_shutdown_err_class,
1762 	TP_PROTO(int rc,
1763 		__u32 flags,
1764 		__u32 tid),
1765 	TP_ARGS(rc, flags, tid),
1766 	TP_STRUCT__entry(
1767 		__field(int, rc)
1768 		__field(__u32, flags)
1769 		__field(__u32, tid)
1770 	),
1771 	TP_fast_assign(
1772 		__entry->rc = rc;
1773 		__entry->flags = flags;
1774 		__entry->tid = tid;
1775 	),
1776 	TP_printk("rc=%d flags=0x%x tid=0x%x",
1777 		__entry->rc, __entry->flags, __entry->tid)
1778 )
1779 
1780 #define DEFINE_SMB3_SHUTDOWN_ERR_EVENT(name)        \
1781 DEFINE_EVENT(smb3_shutdown_err_class, smb3_##name,  \
1782 	TP_PROTO(int rc,		     \
1783 		__u32 flags,		     \
1784 		__u32 tid),		     \
1785 	TP_ARGS(rc, flags, tid))
1786 
1787 DEFINE_SMB3_SHUTDOWN_ERR_EVENT(shutdown_err);
1788 
1789 DECLARE_EVENT_CLASS(smb3_credit_class,
1790 	TP_PROTO(__u64	currmid,
1791 		__u64 conn_id,
1792 		char *hostname,
1793 		int credits,
1794 		int credits_to_add,
1795 		int in_flight),
1796 	TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight),
1797 	TP_STRUCT__entry(
1798 		__field(__u64, currmid)
1799 		__field(__u64, conn_id)
1800 		__string(hostname, hostname)
1801 		__field(int, credits)
1802 		__field(int, credits_to_add)
1803 		__field(int, in_flight)
1804 	),
1805 	TP_fast_assign(
1806 		__entry->currmid = currmid;
1807 		__entry->conn_id = conn_id;
1808 		__assign_str(hostname);
1809 		__entry->credits = credits;
1810 		__entry->credits_to_add = credits_to_add;
1811 		__entry->in_flight = in_flight;
1812 	),
1813 	TP_printk("conn_id=0x%llx server=%s current_mid=%llu "
1814 			"credits=%d credit_change=%d in_flight=%d",
1815 		__entry->conn_id,
1816 		__get_str(hostname),
1817 		__entry->currmid,
1818 		__entry->credits,
1819 		__entry->credits_to_add,
1820 		__entry->in_flight)
1821 )
1822 
1823 #define DEFINE_SMB3_CREDIT_EVENT(name)        \
1824 DEFINE_EVENT(smb3_credit_class, smb3_##name,  \
1825 	TP_PROTO(__u64	currmid,		\
1826 		__u64 conn_id,			\
1827 		char *hostname,			\
1828 		int  credits,			\
1829 		int  credits_to_add,	\
1830 		int in_flight),			\
1831 	TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight))
1832 
1833 DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
1834 DEFINE_SMB3_CREDIT_EVENT(reconnect_detected);
1835 DEFINE_SMB3_CREDIT_EVENT(credit_timeout);
1836 DEFINE_SMB3_CREDIT_EVENT(insufficient_credits);
1837 DEFINE_SMB3_CREDIT_EVENT(too_many_credits);
1838 DEFINE_SMB3_CREDIT_EVENT(add_credits);
1839 DEFINE_SMB3_CREDIT_EVENT(adj_credits);
1840 DEFINE_SMB3_CREDIT_EVENT(hdr_credits);
1841 DEFINE_SMB3_CREDIT_EVENT(nblk_credits);
1842 DEFINE_SMB3_CREDIT_EVENT(pend_credits);
1843 DEFINE_SMB3_CREDIT_EVENT(wait_credits);
1844 DEFINE_SMB3_CREDIT_EVENT(waitff_credits);
1845 DEFINE_SMB3_CREDIT_EVENT(overflow_credits);
1846 DEFINE_SMB3_CREDIT_EVENT(set_credits);
1847 
1848 TRACE_EVENT(smb3_kerberos_auth,
1849 		TP_PROTO(struct TCP_Server_Info *server,
1850 			 struct cifs_ses *ses,
1851 			 int rc),
1852 		TP_ARGS(server, ses, rc),
1853 		TP_STRUCT__entry(
1854 			__field(pid_t, pid)
1855 			__field(uid_t, uid)
1856 			__field(uid_t, cruid)
1857 			__string(host, server->hostname)
1858 			__string(user, ses->user_name)
1859 			__array(__u8, addr, sizeof(struct sockaddr_storage))
1860 			__array(char, sec, sizeof("ntlmsspi"))
1861 			__array(char, upcall_target, sizeof("mount"))
1862 			__field(int, rc)
1863 		),
1864 		TP_fast_assign(
1865 			__entry->pid = current->pid;
1866 			__entry->uid = from_kuid_munged(&init_user_ns, ses->linux_uid);
1867 			__entry->cruid = from_kuid_munged(&init_user_ns, ses->cred_uid);
1868 			__assign_str(host);
1869 			__assign_str(user);
1870 			memcpy(__entry->addr, &server->dstaddr, sizeof(__entry->addr));
1871 
1872 			if (server->sec_kerberos)
1873 				memcpy(__entry->sec, "krb5", sizeof("krb5"));
1874 			else if (server->sec_mskerberos)
1875 				memcpy(__entry->sec, "mskrb5", sizeof("mskrb5"));
1876 			else if (server->sec_iakerb)
1877 				memcpy(__entry->sec, "iakerb", sizeof("iakerb"));
1878 			else
1879 				memcpy(__entry->sec, "krb5", sizeof("krb5"));
1880 
1881 			if (ses->upcall_target == UPTARGET_MOUNT)
1882 				memcpy(__entry->upcall_target, "mount", sizeof("mount"));
1883 			else
1884 				memcpy(__entry->upcall_target, "app", sizeof("app"));
1885 			__entry->rc = rc;
1886 		),
1887 		TP_printk("vers=%d host=%s ip=%pISpsfc sec=%s uid=%d cruid=%d user=%s pid=%d upcall_target=%s err=%d",
1888 			  CIFS_SPNEGO_UPCALL_VERSION, __get_str(host), __entry->addr,
1889 			  __entry->sec, __entry->uid, __entry->cruid, __get_str(user),
1890 			  __entry->pid, __entry->upcall_target, __entry->rc))
1891 
1892 TRACE_EVENT(smb3_tcon_ref,
1893 	    TP_PROTO(unsigned int tcon_debug_id, int ref,
1894 		     enum smb3_tcon_ref_trace trace),
1895 	    TP_ARGS(tcon_debug_id, ref, trace),
1896 	    TP_STRUCT__entry(
1897 		    __field(unsigned int,		tcon)
1898 		    __field(int,			ref)
1899 		    __field(enum smb3_tcon_ref_trace,	trace)
1900 			     ),
1901 	    TP_fast_assign(
1902 		    __entry->tcon	= tcon_debug_id;
1903 		    __entry->ref	= ref;
1904 		    __entry->trace	= trace;
1905 			   ),
1906 	    TP_printk("TC=%08x %s r=%u",
1907 		      __entry->tcon,
1908 		      __print_symbolic(__entry->trace, smb3_tcon_ref_traces),
1909 		      __entry->ref)
1910 	    );
1911 
1912 TRACE_EVENT(smb3_rw_credits,
1913 	    TP_PROTO(unsigned int rreq_debug_id,
1914 		     unsigned int subreq_debug_index,
1915 		     unsigned int subreq_credits,
1916 		     unsigned int server_credits,
1917 		     int server_in_flight,
1918 		     int credit_change,
1919 		     enum smb3_rw_credits_trace trace),
1920 	    TP_ARGS(rreq_debug_id, subreq_debug_index, subreq_credits,
1921 		    server_credits, server_in_flight, credit_change, trace),
1922 	    TP_STRUCT__entry(
1923 		    __field(unsigned int, rreq_debug_id)
1924 		    __field(unsigned int, subreq_debug_index)
1925 		    __field(unsigned int, subreq_credits)
1926 		    __field(unsigned int, server_credits)
1927 		    __field(int,	  in_flight)
1928 		    __field(int,	  credit_change)
1929 		    __field(enum smb3_rw_credits_trace, trace)
1930 			     ),
1931 	    TP_fast_assign(
1932 		    __entry->rreq_debug_id	= rreq_debug_id;
1933 		    __entry->subreq_debug_index	= subreq_debug_index;
1934 		    __entry->subreq_credits	= subreq_credits;
1935 		    __entry->server_credits	= server_credits;
1936 		    __entry->in_flight		= server_in_flight;
1937 		    __entry->credit_change	= credit_change;
1938 		    __entry->trace		= trace;
1939 			   ),
1940 	    TP_printk("R=%08x[%x] %s cred=%u chg=%d pool=%u ifl=%d",
1941 		      __entry->rreq_debug_id, __entry->subreq_debug_index,
1942 		      __print_symbolic(__entry->trace, smb3_rw_credits_traces),
1943 		      __entry->subreq_credits, __entry->credit_change,
1944 		      __entry->server_credits, __entry->in_flight)
1945 	    );
1946 
1947 TRACE_EVENT(smb3_eio,
1948 	    TP_PROTO(enum smb_eio_trace trace, unsigned long info, unsigned long info2),
1949 	    TP_ARGS(trace, info, info2),
1950 	    TP_STRUCT__entry(
1951 		    __field(enum smb_eio_trace,	trace)
1952 		    __field(unsigned long,	info)
1953 		    __field(unsigned long,	info2)
1954 			     ),
1955 	    TP_fast_assign(
1956 		    __entry->trace	= trace;
1957 		    __entry->info	= info;
1958 		    __entry->info2	= info2;
1959 			   ),
1960 	    TP_printk("%s info=%lx,%lx",
1961 		      __print_symbolic(__entry->trace, smb_eio_traces),
1962 		      __entry->info, __entry->info2)
1963 	    );
1964 
1965 #undef EM
1966 #undef E_
1967 #endif /* _CIFS_TRACE_H */
1968 
1969 #undef TRACE_INCLUDE_PATH
1970 #define TRACE_INCLUDE_PATH .
1971 #define TRACE_INCLUDE_FILE trace
1972 #include <trace/define_trace.h>
1973