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