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