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