xref: /linux/fs/smb/client/trace.h (revision 3d99347a2e1ae60d9368b1d734290bab1acde0ce)
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_reconnect_server,	"PUT Reconn") \
193 	EM(netfs_trace_tcon_ref_put_tlink,		"PUT Tlink ") \
194 	EM(netfs_trace_tcon_ref_see_cancelled_close,	"SEE Cn-Cls") \
195 	EM(netfs_trace_tcon_ref_see_fscache_collision,	"SEE FV-CO!") \
196 	EM(netfs_trace_tcon_ref_see_fscache_okay,	"SEE FV-Ok ") \
197 	EM(netfs_trace_tcon_ref_see_fscache_relinq,	"SEE FV-Rlq") \
198 	E_(netfs_trace_tcon_ref_see_umount,		"SEE Umount")
199 
200 #undef EM
201 #undef E_
202 
203 /*
204  * Define those tracing enums.
205  */
206 #ifndef __SMB3_DECLARE_TRACE_ENUMS_ONCE_ONLY
207 #define __SMB3_DECLARE_TRACE_ENUMS_ONCE_ONLY
208 
209 #define EM(a, b) a,
210 #define E_(a, b) a
211 
212 enum smb_eio_trace		{ smb_eio_traces } __mode(byte);
213 enum smb3_rw_credits_trace	{ smb3_rw_credits_traces } __mode(byte);
214 enum smb3_tcon_ref_trace	{ smb3_tcon_ref_traces } __mode(byte);
215 
216 #undef EM
217 #undef E_
218 #endif
219 
220 /*
221  * Export enum symbols via userspace.
222  */
223 #define EM(a, b) TRACE_DEFINE_ENUM(a);
224 #define E_(a, b) TRACE_DEFINE_ENUM(a);
225 
226 smb_eio_traces;
227 smb3_rw_credits_traces;
228 smb3_tcon_ref_traces;
229 
230 #undef EM
231 #undef E_
232 
233 /*
234  * Now redefine the EM() and E_() macros to map the enums to the strings that
235  * will be printed in the output.
236  */
237 #define EM(a, b)	{ a, b },
238 #define E_(a, b)	{ a, b }
239 
240 /* For logging errors in read or write */
241 DECLARE_EVENT_CLASS(smb3_rw_err_class,
242 	TP_PROTO(unsigned int rreq_debug_id,
243 		 unsigned int rreq_debug_index,
244 		 unsigned int xid,
245 		 __u64	fid,
246 		 __u32	tid,
247 		 __u64	sesid,
248 		 __u64	offset,
249 		 __u32	len,
250 		 int	rc),
251 	TP_ARGS(rreq_debug_id, rreq_debug_index,
252 		xid, fid, tid, sesid, offset, len, rc),
253 	TP_STRUCT__entry(
254 		__field(unsigned int, rreq_debug_id)
255 		__field(unsigned int, rreq_debug_index)
256 		__field(unsigned int, xid)
257 		__field(__u64, fid)
258 		__field(__u32, tid)
259 		__field(__u64, sesid)
260 		__field(__u64, offset)
261 		__field(__u32, len)
262 		__field(int, rc)
263 	),
264 	TP_fast_assign(
265 		__entry->rreq_debug_id = rreq_debug_id;
266 		__entry->rreq_debug_index = rreq_debug_index;
267 		__entry->xid = xid;
268 		__entry->fid = fid;
269 		__entry->tid = tid;
270 		__entry->sesid = sesid;
271 		__entry->offset = offset;
272 		__entry->len = len;
273 		__entry->rc = rc;
274 	),
275 	TP_printk("R=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
276 		  __entry->rreq_debug_id, __entry->rreq_debug_index,
277 		  __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
278 		  __entry->offset, __entry->len, __entry->rc)
279 )
280 
281 #define DEFINE_SMB3_RW_ERR_EVENT(name)          \
282 DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
283 	TP_PROTO(unsigned int rreq_debug_id,	\
284 		 unsigned int rreq_debug_index,		\
285 		 unsigned int xid,			\
286 		 __u64	fid,				\
287 		 __u32	tid,				\
288 		 __u64	sesid,				\
289 		 __u64	offset,				\
290 		 __u32	len,				\
291 		 int	rc),				\
292 	TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, len, rc))
293 
294 DEFINE_SMB3_RW_ERR_EVENT(read_err);
295 DEFINE_SMB3_RW_ERR_EVENT(write_err);
296 
297 /* For logging errors in other file I/O ops */
298 DECLARE_EVENT_CLASS(smb3_other_err_class,
299 	TP_PROTO(unsigned int xid,
300 		__u64	fid,
301 		__u32	tid,
302 		__u64	sesid,
303 		__u64	offset,
304 		__u32	len,
305 		int	rc),
306 	TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
307 	TP_STRUCT__entry(
308 		__field(unsigned int, xid)
309 		__field(__u64, fid)
310 		__field(__u32, tid)
311 		__field(__u64, sesid)
312 		__field(__u64, offset)
313 		__field(__u32, len)
314 		__field(int, rc)
315 	),
316 	TP_fast_assign(
317 		__entry->xid = xid;
318 		__entry->fid = fid;
319 		__entry->tid = tid;
320 		__entry->sesid = sesid;
321 		__entry->offset = offset;
322 		__entry->len = len;
323 		__entry->rc = rc;
324 	),
325 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
326 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
327 		__entry->offset, __entry->len, __entry->rc)
328 )
329 
330 #define DEFINE_SMB3_OTHER_ERR_EVENT(name)	\
331 DEFINE_EVENT(smb3_other_err_class, smb3_##name, \
332 	TP_PROTO(unsigned int xid,		\
333 		__u64	fid,			\
334 		__u32	tid,			\
335 		__u64	sesid,			\
336 		__u64	offset,			\
337 		__u32	len,			\
338 		int	rc),			\
339 	TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
340 
341 DEFINE_SMB3_OTHER_ERR_EVENT(query_dir_err);
342 DEFINE_SMB3_OTHER_ERR_EVENT(zero_err);
343 DEFINE_SMB3_OTHER_ERR_EVENT(falloc_err);
344 
345 /*
346  * For logging errors in reflink and copy_range ops e.g. smb2_copychunk_range
347  * and smb2_duplicate_extents
348  */
349 DECLARE_EVENT_CLASS(smb3_copy_range_err_class,
350 	TP_PROTO(unsigned int xid,
351 		__u64	src_fid,
352 		__u64   target_fid,
353 		__u32	tid,
354 		__u64	sesid,
355 		__u64	src_offset,
356 		__u64   target_offset,
357 		__u32	len,
358 		int	rc),
359 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len, rc),
360 	TP_STRUCT__entry(
361 		__field(unsigned int, xid)
362 		__field(__u64, src_fid)
363 		__field(__u64, target_fid)
364 		__field(__u32, tid)
365 		__field(__u64, sesid)
366 		__field(__u64, src_offset)
367 		__field(__u64, target_offset)
368 		__field(__u32, len)
369 		__field(int, rc)
370 	),
371 	TP_fast_assign(
372 		__entry->xid = xid;
373 		__entry->src_fid = src_fid;
374 		__entry->target_fid = target_fid;
375 		__entry->tid = tid;
376 		__entry->sesid = sesid;
377 		__entry->src_offset = src_offset;
378 		__entry->target_offset = target_offset;
379 		__entry->len = len;
380 		__entry->rc = rc;
381 	),
382 	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",
383 		__entry->xid, __entry->sesid, __entry->tid, __entry->target_fid,
384 		__entry->src_offset, __entry->target_fid, __entry->target_offset, __entry->len, __entry->rc)
385 )
386 
387 #define DEFINE_SMB3_COPY_RANGE_ERR_EVENT(name)	\
388 DEFINE_EVENT(smb3_copy_range_err_class, smb3_##name, \
389 	TP_PROTO(unsigned int xid,		\
390 		__u64	src_fid,		\
391 		__u64   target_fid,		\
392 		__u32	tid,			\
393 		__u64	sesid,			\
394 		__u64	src_offset,		\
395 		__u64	target_offset,		\
396 		__u32	len,			\
397 		int	rc),			\
398 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len, rc))
399 
400 DEFINE_SMB3_COPY_RANGE_ERR_EVENT(clone_err);
401 DEFINE_SMB3_COPY_RANGE_ERR_EVENT(copychunk_err);
402 
403 DECLARE_EVENT_CLASS(smb3_copy_range_done_class,
404 	TP_PROTO(unsigned int xid,
405 		__u64	src_fid,
406 		__u64   target_fid,
407 		__u32	tid,
408 		__u64	sesid,
409 		__u64	src_offset,
410 		__u64   target_offset,
411 		__u32	len),
412 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len),
413 	TP_STRUCT__entry(
414 		__field(unsigned int, xid)
415 		__field(__u64, src_fid)
416 		__field(__u64, target_fid)
417 		__field(__u32, tid)
418 		__field(__u64, sesid)
419 		__field(__u64, src_offset)
420 		__field(__u64, target_offset)
421 		__field(__u32, len)
422 	),
423 	TP_fast_assign(
424 		__entry->xid = xid;
425 		__entry->src_fid = src_fid;
426 		__entry->target_fid = target_fid;
427 		__entry->tid = tid;
428 		__entry->sesid = sesid;
429 		__entry->src_offset = src_offset;
430 		__entry->target_offset = target_offset;
431 		__entry->len = len;
432 	),
433 	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",
434 		__entry->xid, __entry->sesid, __entry->tid, __entry->target_fid,
435 		__entry->src_offset, __entry->target_fid, __entry->target_offset, __entry->len)
436 )
437 
438 #define DEFINE_SMB3_COPY_RANGE_DONE_EVENT(name)	\
439 DEFINE_EVENT(smb3_copy_range_done_class, smb3_##name, \
440 	TP_PROTO(unsigned int xid,		\
441 		__u64	src_fid,		\
442 		__u64   target_fid,		\
443 		__u32	tid,			\
444 		__u64	sesid,			\
445 		__u64	src_offset,		\
446 		__u64	target_offset,		\
447 		__u32	len),			\
448 	TP_ARGS(xid, src_fid, target_fid, tid, sesid, src_offset, target_offset, len))
449 
450 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_enter);
451 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_enter);
452 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(copychunk_done);
453 DEFINE_SMB3_COPY_RANGE_DONE_EVENT(clone_done);
454 
455 
456 /* For logging successful read or write */
457 DECLARE_EVENT_CLASS(smb3_rw_done_class,
458 	TP_PROTO(unsigned int rreq_debug_id,
459 		 unsigned int rreq_debug_index,
460 		 unsigned int xid,
461 		 __u64	fid,
462 		 __u32	tid,
463 		 __u64	sesid,
464 		 __u64	offset,
465 		 __u32	len),
466 	TP_ARGS(rreq_debug_id, rreq_debug_index,
467 		xid, fid, tid, sesid, offset, len),
468 	TP_STRUCT__entry(
469 		__field(unsigned int, rreq_debug_id)
470 		__field(unsigned int, rreq_debug_index)
471 		__field(unsigned int, xid)
472 		__field(__u64, fid)
473 		__field(__u32, tid)
474 		__field(__u64, sesid)
475 		__field(__u64, offset)
476 		__field(__u32, len)
477 	),
478 	TP_fast_assign(
479 		__entry->rreq_debug_id = rreq_debug_id;
480 		__entry->rreq_debug_index = rreq_debug_index;
481 		__entry->xid = xid;
482 		__entry->fid = fid;
483 		__entry->tid = tid;
484 		__entry->sesid = sesid;
485 		__entry->offset = offset;
486 		__entry->len = len;
487 	),
488 	TP_printk("R=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
489 		  __entry->rreq_debug_id, __entry->rreq_debug_index,
490 		  __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
491 		  __entry->offset, __entry->len)
492 )
493 
494 #define DEFINE_SMB3_RW_DONE_EVENT(name)         \
495 DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
496 	TP_PROTO(unsigned int rreq_debug_id,	\
497 		 unsigned int rreq_debug_index,	\
498 		 unsigned int xid,		\
499 		__u64	fid,			\
500 		__u32	tid,			\
501 		__u64	sesid,			\
502 		__u64	offset,			\
503 		__u32	len),			\
504 	TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, len))
505 
506 DEFINE_SMB3_RW_DONE_EVENT(read_enter);
507 DEFINE_SMB3_RW_DONE_EVENT(read_done);
508 DEFINE_SMB3_RW_DONE_EVENT(write_enter);
509 DEFINE_SMB3_RW_DONE_EVENT(write_done);
510 
511 /* For logging successful other op */
512 DECLARE_EVENT_CLASS(smb3_other_done_class,
513 	TP_PROTO(unsigned int xid,
514 		__u64	fid,
515 		__u32	tid,
516 		__u64	sesid,
517 		__u64	offset,
518 		__u32	len),
519 	TP_ARGS(xid, fid, tid, sesid, offset, len),
520 	TP_STRUCT__entry(
521 		__field(unsigned int, xid)
522 		__field(__u64, fid)
523 		__field(__u32, tid)
524 		__field(__u64, sesid)
525 		__field(__u64, offset)
526 		__field(__u32, len)
527 	),
528 	TP_fast_assign(
529 		__entry->xid = xid;
530 		__entry->fid = fid;
531 		__entry->tid = tid;
532 		__entry->sesid = sesid;
533 		__entry->offset = offset;
534 		__entry->len = len;
535 	),
536 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
537 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
538 		__entry->offset, __entry->len)
539 )
540 
541 #define DEFINE_SMB3_OTHER_DONE_EVENT(name)         \
542 DEFINE_EVENT(smb3_other_done_class, smb3_##name,   \
543 	TP_PROTO(unsigned int xid,		\
544 		__u64	fid,			\
545 		__u32	tid,			\
546 		__u64	sesid,			\
547 		__u64	offset,			\
548 		__u32	len),			\
549 	TP_ARGS(xid, fid, tid, sesid, offset, len))
550 
551 DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_enter);
552 DEFINE_SMB3_OTHER_DONE_EVENT(zero_enter);
553 DEFINE_SMB3_OTHER_DONE_EVENT(falloc_enter);
554 DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_done);
555 DEFINE_SMB3_OTHER_DONE_EVENT(zero_done);
556 DEFINE_SMB3_OTHER_DONE_EVENT(falloc_done);
557 
558 /* For logging successful set EOF (truncate) */
559 DECLARE_EVENT_CLASS(smb3_eof_class,
560 	TP_PROTO(unsigned int xid,
561 		__u64	fid,
562 		__u32	tid,
563 		__u64	sesid,
564 		__u64	offset),
565 	TP_ARGS(xid, fid, tid, sesid, offset),
566 	TP_STRUCT__entry(
567 		__field(unsigned int, xid)
568 		__field(__u64, fid)
569 		__field(__u32, tid)
570 		__field(__u64, sesid)
571 		__field(__u64, offset)
572 	),
573 	TP_fast_assign(
574 		__entry->xid = xid;
575 		__entry->fid = fid;
576 		__entry->tid = tid;
577 		__entry->sesid = sesid;
578 		__entry->offset = offset;
579 	),
580 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx",
581 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
582 		__entry->offset)
583 )
584 
585 #define DEFINE_SMB3_EOF_EVENT(name)         \
586 DEFINE_EVENT(smb3_eof_class, smb3_##name,   \
587 	TP_PROTO(unsigned int xid,		\
588 		__u64	fid,			\
589 		__u32	tid,			\
590 		__u64	sesid,			\
591 		__u64	offset),		\
592 	TP_ARGS(xid, fid, tid, sesid, offset))
593 
594 DEFINE_SMB3_EOF_EVENT(set_eof);
595 
596 /*
597  * For handle based calls other than read and write, and get/set info
598  */
599 DECLARE_EVENT_CLASS(smb3_fd_class,
600 	TP_PROTO(unsigned int xid,
601 		__u64	fid,
602 		__u32	tid,
603 		__u64	sesid),
604 	TP_ARGS(xid, fid, tid, sesid),
605 	TP_STRUCT__entry(
606 		__field(unsigned int, xid)
607 		__field(__u64, fid)
608 		__field(__u32, tid)
609 		__field(__u64, sesid)
610 	),
611 	TP_fast_assign(
612 		__entry->xid = xid;
613 		__entry->fid = fid;
614 		__entry->tid = tid;
615 		__entry->sesid = sesid;
616 	),
617 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx",
618 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid)
619 )
620 
621 #define DEFINE_SMB3_FD_EVENT(name)          \
622 DEFINE_EVENT(smb3_fd_class, smb3_##name,    \
623 	TP_PROTO(unsigned int xid,		\
624 		__u64	fid,			\
625 		__u32	tid,			\
626 		__u64	sesid),			\
627 	TP_ARGS(xid, fid, tid, sesid))
628 
629 DEFINE_SMB3_FD_EVENT(flush_enter);
630 DEFINE_SMB3_FD_EVENT(flush_done);
631 DEFINE_SMB3_FD_EVENT(close_enter);
632 DEFINE_SMB3_FD_EVENT(close_done);
633 DEFINE_SMB3_FD_EVENT(oplock_not_found);
634 
635 DECLARE_EVENT_CLASS(smb3_fd_err_class,
636 	TP_PROTO(unsigned int xid,
637 		__u64	fid,
638 		__u32	tid,
639 		__u64	sesid,
640 		int	rc),
641 	TP_ARGS(xid, fid, tid, sesid, rc),
642 	TP_STRUCT__entry(
643 		__field(unsigned int, xid)
644 		__field(__u64, fid)
645 		__field(__u32, tid)
646 		__field(__u64, sesid)
647 		__field(int, rc)
648 	),
649 	TP_fast_assign(
650 		__entry->xid = xid;
651 		__entry->fid = fid;
652 		__entry->tid = tid;
653 		__entry->sesid = sesid;
654 		__entry->rc = rc;
655 	),
656 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
657 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
658 		__entry->rc)
659 )
660 
661 #define DEFINE_SMB3_FD_ERR_EVENT(name)          \
662 DEFINE_EVENT(smb3_fd_err_class, smb3_##name,    \
663 	TP_PROTO(unsigned int xid,		\
664 		__u64	fid,			\
665 		__u32	tid,			\
666 		__u64	sesid,			\
667 		int	rc),			\
668 	TP_ARGS(xid, fid, tid, sesid, rc))
669 
670 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
671 DEFINE_SMB3_FD_ERR_EVENT(lock_err);
672 DEFINE_SMB3_FD_ERR_EVENT(close_err);
673 
674 /*
675  * For handle based query/set info calls
676  */
677 DECLARE_EVENT_CLASS(smb3_inf_enter_class,
678 	TP_PROTO(unsigned int xid,
679 		__u64	fid,
680 		__u32	tid,
681 		__u64	sesid,
682 		__u8	infclass,
683 		__u32	type),
684 	TP_ARGS(xid, fid, tid, sesid, infclass, type),
685 	TP_STRUCT__entry(
686 		__field(unsigned int, xid)
687 		__field(__u64, fid)
688 		__field(__u32, tid)
689 		__field(__u64, sesid)
690 		__field(__u8, infclass)
691 		__field(__u32, type)
692 	),
693 	TP_fast_assign(
694 		__entry->xid = xid;
695 		__entry->fid = fid;
696 		__entry->tid = tid;
697 		__entry->sesid = sesid;
698 		__entry->infclass = infclass;
699 		__entry->type = type;
700 	),
701 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x",
702 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
703 		__entry->infclass, __entry->type)
704 )
705 
706 #define DEFINE_SMB3_INF_ENTER_EVENT(name)          \
707 DEFINE_EVENT(smb3_inf_enter_class, smb3_##name,    \
708 	TP_PROTO(unsigned int xid,		\
709 		__u64	fid,			\
710 		__u32	tid,			\
711 		__u64	sesid,			\
712 		__u8	infclass,		\
713 		__u32	type),			\
714 	TP_ARGS(xid, fid, tid, sesid, infclass, type))
715 
716 DEFINE_SMB3_INF_ENTER_EVENT(query_info_enter);
717 DEFINE_SMB3_INF_ENTER_EVENT(query_info_done);
718 DEFINE_SMB3_INF_ENTER_EVENT(notify_enter);
719 DEFINE_SMB3_INF_ENTER_EVENT(notify_done);
720 
721 DECLARE_EVENT_CLASS(smb3_inf_err_class,
722 	TP_PROTO(unsigned int xid,
723 		__u64	fid,
724 		__u32	tid,
725 		__u64	sesid,
726 		__u8	infclass,
727 		__u32	type,
728 		int	rc),
729 	TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
730 	TP_STRUCT__entry(
731 		__field(unsigned int, xid)
732 		__field(__u64, fid)
733 		__field(__u32, tid)
734 		__field(__u64, sesid)
735 		__field(__u8, infclass)
736 		__field(__u32, type)
737 		__field(int, rc)
738 	),
739 	TP_fast_assign(
740 		__entry->xid = xid;
741 		__entry->fid = fid;
742 		__entry->tid = tid;
743 		__entry->sesid = sesid;
744 		__entry->infclass = infclass;
745 		__entry->type = type;
746 		__entry->rc = rc;
747 	),
748 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
749 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
750 		__entry->infclass, __entry->type, __entry->rc)
751 )
752 
753 #define DEFINE_SMB3_INF_ERR_EVENT(name)          \
754 DEFINE_EVENT(smb3_inf_err_class, smb3_##name,    \
755 	TP_PROTO(unsigned int xid,		\
756 		__u64	fid,			\
757 		__u32	tid,			\
758 		__u64	sesid,			\
759 		__u8	infclass,		\
760 		__u32	type,			\
761 		int	rc),			\
762 	TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
763 
764 DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
765 DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
766 DEFINE_SMB3_INF_ERR_EVENT(notify_err);
767 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
768 
769 DECLARE_EVENT_CLASS(smb3_inf_compound_enter_class,
770 	TP_PROTO(unsigned int xid,
771 		__u32	tid,
772 		__u64	sesid,
773 		const char *full_path),
774 	TP_ARGS(xid, tid, sesid, full_path),
775 	TP_STRUCT__entry(
776 		__field(unsigned int, xid)
777 		__field(__u32, tid)
778 		__field(__u64, sesid)
779 		__string(path, full_path)
780 	),
781 	TP_fast_assign(
782 		__entry->xid = xid;
783 		__entry->tid = tid;
784 		__entry->sesid = sesid;
785 		__assign_str(path);
786 	),
787 	TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s",
788 		__entry->xid, __entry->sesid, __entry->tid,
789 		__get_str(path))
790 )
791 
792 #define DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(name)     \
793 DEFINE_EVENT(smb3_inf_compound_enter_class, smb3_##name,    \
794 	TP_PROTO(unsigned int xid,		\
795 		__u32	tid,			\
796 		__u64	sesid,			\
797 		const char *full_path),		\
798 	TP_ARGS(xid, tid, sesid, full_path))
799 
800 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_info_compound_enter);
801 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(posix_query_info_compound_enter);
802 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(hardlink_enter);
803 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rename_enter);
804 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(unlink_enter);
805 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_eof_enter);
806 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_info_compound_enter);
807 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_reparse_compound_enter);
808 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(get_reparse_compound_enter);
809 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_wsl_ea_compound_enter);
810 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mkdir_enter);
811 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(tdis_enter);
812 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mknod_enter);
813 
814 DECLARE_EVENT_CLASS(smb3_inf_compound_done_class,
815 	TP_PROTO(unsigned int xid,
816 		__u32	tid,
817 		__u64	sesid),
818 	TP_ARGS(xid, tid, sesid),
819 	TP_STRUCT__entry(
820 		__field(unsigned int, xid)
821 		__field(__u32, tid)
822 		__field(__u64, sesid)
823 	),
824 	TP_fast_assign(
825 		__entry->xid = xid;
826 		__entry->tid = tid;
827 		__entry->sesid = sesid;
828 	),
829 	TP_printk("xid=%u sid=0x%llx tid=0x%x",
830 		__entry->xid, __entry->sesid, __entry->tid)
831 )
832 
833 #define DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(name)     \
834 DEFINE_EVENT(smb3_inf_compound_done_class, smb3_##name,    \
835 	TP_PROTO(unsigned int xid,		\
836 		__u32	tid,			\
837 		__u64	sesid),			\
838 	TP_ARGS(xid, tid, sesid))
839 
840 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_info_compound_done);
841 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(posix_query_info_compound_done);
842 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(hardlink_done);
843 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rename_done);
844 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(unlink_done);
845 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_eof_done);
846 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_info_compound_done);
847 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_reparse_compound_done);
848 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(get_reparse_compound_done);
849 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_wsl_ea_compound_done);
850 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mkdir_done);
851 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(tdis_done);
852 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mknod_done);
853 
854 DECLARE_EVENT_CLASS(smb3_inf_compound_err_class,
855 	TP_PROTO(unsigned int xid,
856 		__u32	tid,
857 		__u64	sesid,
858 		int	rc),
859 	TP_ARGS(xid, tid, sesid, rc),
860 	TP_STRUCT__entry(
861 		__field(unsigned int, xid)
862 		__field(__u32, tid)
863 		__field(__u64, sesid)
864 		__field(int, rc)
865 	),
866 	TP_fast_assign(
867 		__entry->xid = xid;
868 		__entry->tid = tid;
869 		__entry->sesid = sesid;
870 		__entry->rc = rc;
871 	),
872 	TP_printk("xid=%u sid=0x%llx tid=0x%x rc=%d",
873 		__entry->xid, __entry->sesid, __entry->tid,
874 		__entry->rc)
875 )
876 
877 #define DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(name)     \
878 DEFINE_EVENT(smb3_inf_compound_err_class, smb3_##name,    \
879 	TP_PROTO(unsigned int xid,		\
880 		__u32	tid,			\
881 		__u64	sesid,			\
882 		int rc),			\
883 	TP_ARGS(xid, tid, sesid, rc))
884 
885 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_info_compound_err);
886 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(posix_query_info_compound_err);
887 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(hardlink_err);
888 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rename_err);
889 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(unlink_err);
890 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_eof_err);
891 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_info_compound_err);
892 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_reparse_compound_err);
893 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(get_reparse_compound_err);
894 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_wsl_ea_compound_err);
895 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mkdir_err);
896 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(tdis_err);
897 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mknod_err);
898 
899 /*
900  * For logging SMB3 Status code and Command for responses which return errors
901  */
902 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
903 	TP_PROTO(__u32	tid,
904 		__u64	sesid,
905 		__u16	cmd,
906 		__u64	mid,
907 		__u32	status,
908 		int	rc),
909 	TP_ARGS(tid, sesid, cmd, mid, status, rc),
910 	TP_STRUCT__entry(
911 		__field(__u32, tid)
912 		__field(__u64, sesid)
913 		__field(__u16, cmd)
914 		__field(__u64, mid)
915 		__field(__u32, status)
916 		__field(int, rc)
917 	),
918 	TP_fast_assign(
919 		__entry->tid = tid;
920 		__entry->sesid = sesid;
921 		__entry->cmd = cmd;
922 		__entry->mid = mid;
923 		__entry->status = status;
924 		__entry->rc = rc;
925 	),
926 	TP_printk("sid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
927 		__entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
928 		__entry->status, __entry->rc)
929 )
930 
931 #define DEFINE_SMB3_CMD_ERR_EVENT(name)          \
932 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name,    \
933 	TP_PROTO(__u32	tid,			\
934 		__u64	sesid,			\
935 		__u16	cmd,			\
936 		__u64	mid,			\
937 		__u32	status,			\
938 		int	rc),			\
939 	TP_ARGS(tid, sesid, cmd, mid, status, rc))
940 
941 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
942 
943 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
944 	TP_PROTO(__u32	tid,
945 		__u64	sesid,
946 		__u16	cmd,
947 		__u64	mid),
948 	TP_ARGS(tid, sesid, cmd, mid),
949 	TP_STRUCT__entry(
950 		__field(__u32, tid)
951 		__field(__u64, sesid)
952 		__field(__u16, cmd)
953 		__field(__u64, mid)
954 	),
955 	TP_fast_assign(
956 		__entry->tid = tid;
957 		__entry->sesid = sesid;
958 		__entry->cmd = cmd;
959 		__entry->mid = mid;
960 	),
961 	TP_printk("sid=0x%llx tid=0x%x cmd=%u mid=%llu",
962 		__entry->sesid, __entry->tid,
963 		__entry->cmd, __entry->mid)
964 )
965 
966 #define DEFINE_SMB3_CMD_DONE_EVENT(name)          \
967 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name,    \
968 	TP_PROTO(__u32	tid,			\
969 		__u64	sesid,			\
970 		__u16	cmd,			\
971 		__u64	mid),			\
972 	TP_ARGS(tid, sesid, cmd, mid))
973 
974 DEFINE_SMB3_CMD_DONE_EVENT(cmd_enter);
975 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
976 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
977 
978 DECLARE_EVENT_CLASS(smb3_mid_class,
979 	TP_PROTO(__u16	cmd,
980 		__u64	mid,
981 		__u32	pid,
982 		unsigned long when_sent,
983 		unsigned long when_received),
984 	TP_ARGS(cmd, mid, pid, when_sent, when_received),
985 	TP_STRUCT__entry(
986 		__field(__u16, cmd)
987 		__field(__u64, mid)
988 		__field(__u32, pid)
989 		__field(unsigned long, when_sent)
990 		__field(unsigned long, when_received)
991 	),
992 	TP_fast_assign(
993 		__entry->cmd = cmd;
994 		__entry->mid = mid;
995 		__entry->pid = pid;
996 		__entry->when_sent = when_sent;
997 		__entry->when_received = when_received;
998 	),
999 	TP_printk("cmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
1000 		__entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
1001 		__entry->when_received)
1002 )
1003 
1004 #define DEFINE_SMB3_MID_EVENT(name)          \
1005 DEFINE_EVENT(smb3_mid_class, smb3_##name,    \
1006 	TP_PROTO(__u16	cmd,			\
1007 		__u64	mid,			\
1008 		__u32	pid,			\
1009 		unsigned long when_sent,	\
1010 		unsigned long when_received),	\
1011 	TP_ARGS(cmd, mid, pid, when_sent, when_received))
1012 
1013 DEFINE_SMB3_MID_EVENT(slow_rsp);
1014 
1015 DECLARE_EVENT_CLASS(smb3_exit_err_class,
1016 	TP_PROTO(unsigned int xid,
1017 		const char *func_name,
1018 		int	rc),
1019 	TP_ARGS(xid, func_name, rc),
1020 	TP_STRUCT__entry(
1021 		__field(unsigned int, xid)
1022 		__string(func_name, func_name)
1023 		__field(int, rc)
1024 	),
1025 	TP_fast_assign(
1026 		__entry->xid = xid;
1027 		__assign_str(func_name);
1028 		__entry->rc = rc;
1029 	),
1030 	TP_printk("%s: xid=%u rc=%d",
1031 		__get_str(func_name), __entry->xid, __entry->rc)
1032 )
1033 
1034 #define DEFINE_SMB3_EXIT_ERR_EVENT(name)          \
1035 DEFINE_EVENT(smb3_exit_err_class, smb3_##name,    \
1036 	TP_PROTO(unsigned int xid,		\
1037 		const char *func_name,		\
1038 		int	rc),			\
1039 	TP_ARGS(xid, func_name, rc))
1040 
1041 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
1042 
1043 
1044 DECLARE_EVENT_CLASS(smb3_sync_err_class,
1045 	TP_PROTO(unsigned long ino,
1046 		int	rc),
1047 	TP_ARGS(ino, rc),
1048 	TP_STRUCT__entry(
1049 		__field(unsigned long, ino)
1050 		__field(int, rc)
1051 	),
1052 	TP_fast_assign(
1053 		__entry->ino = ino;
1054 		__entry->rc = rc;
1055 	),
1056 	TP_printk("ino=%lu rc=%d",
1057 		__entry->ino, __entry->rc)
1058 )
1059 
1060 #define DEFINE_SMB3_SYNC_ERR_EVENT(name)          \
1061 DEFINE_EVENT(smb3_sync_err_class, cifs_##name,    \
1062 	TP_PROTO(unsigned long ino,		\
1063 		int	rc),			\
1064 	TP_ARGS(ino, rc))
1065 
1066 DEFINE_SMB3_SYNC_ERR_EVENT(fsync_err);
1067 DEFINE_SMB3_SYNC_ERR_EVENT(flush_err);
1068 
1069 
1070 DECLARE_EVENT_CLASS(smb3_enter_exit_class,
1071 	TP_PROTO(unsigned int xid,
1072 		const char *func_name),
1073 	TP_ARGS(xid, func_name),
1074 	TP_STRUCT__entry(
1075 		__field(unsigned int, xid)
1076 		__string(func_name, func_name)
1077 	),
1078 	TP_fast_assign(
1079 		__entry->xid = xid;
1080 		__assign_str(func_name);
1081 	),
1082 	TP_printk("%s: xid=%u",
1083 		__get_str(func_name), __entry->xid)
1084 )
1085 
1086 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name)        \
1087 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name,  \
1088 	TP_PROTO(unsigned int xid,		\
1089 		const char *func_name),		\
1090 	TP_ARGS(xid, func_name))
1091 
1092 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
1093 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
1094 
1095 /*
1096  * For SMB2/SMB3 tree connect
1097  */
1098 
1099 DECLARE_EVENT_CLASS(smb3_tcon_class,
1100 	TP_PROTO(unsigned int xid,
1101 		__u32	tid,
1102 		__u64	sesid,
1103 		const char *unc_name,
1104 		int	rc),
1105 	TP_ARGS(xid, tid, sesid, unc_name, rc),
1106 	TP_STRUCT__entry(
1107 		__field(unsigned int, xid)
1108 		__field(__u32, tid)
1109 		__field(__u64, sesid)
1110 		__string(name, unc_name)
1111 		__field(int, rc)
1112 	),
1113 	TP_fast_assign(
1114 		__entry->xid = xid;
1115 		__entry->tid = tid;
1116 		__entry->sesid = sesid;
1117 		__assign_str(name);
1118 		__entry->rc = rc;
1119 	),
1120 	TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d",
1121 		__entry->xid, __entry->sesid, __entry->tid,
1122 		__get_str(name), __entry->rc)
1123 )
1124 
1125 #define DEFINE_SMB3_TCON_EVENT(name)          \
1126 DEFINE_EVENT(smb3_tcon_class, smb3_##name,    \
1127 	TP_PROTO(unsigned int xid,		\
1128 		__u32	tid,			\
1129 		__u64	sesid,			\
1130 		const char *unc_name,		\
1131 		int	rc),			\
1132 	TP_ARGS(xid, tid, sesid, unc_name, rc))
1133 
1134 DEFINE_SMB3_TCON_EVENT(tcon);
1135 DEFINE_SMB3_TCON_EVENT(qfs_done);
1136 
1137 /*
1138  * For smb2/smb3 open (including create and mkdir) calls
1139  */
1140 
1141 DECLARE_EVENT_CLASS(smb3_open_enter_class,
1142 	TP_PROTO(unsigned int xid,
1143 		__u32	tid,
1144 		__u64	sesid,
1145 		const char *full_path,
1146 		int	create_options,
1147 		int	desired_access),
1148 	TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access),
1149 	TP_STRUCT__entry(
1150 		__field(unsigned int, xid)
1151 		__field(__u32, tid)
1152 		__field(__u64, sesid)
1153 		__string(path, full_path)
1154 		__field(int, create_options)
1155 		__field(int, desired_access)
1156 	),
1157 	TP_fast_assign(
1158 		__entry->xid = xid;
1159 		__entry->tid = tid;
1160 		__entry->sesid = sesid;
1161 		__assign_str(path);
1162 		__entry->create_options = create_options;
1163 		__entry->desired_access = desired_access;
1164 	),
1165 	TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s cr_opts=0x%x des_access=0x%x",
1166 		__entry->xid, __entry->sesid, __entry->tid, __get_str(path),
1167 		__entry->create_options, __entry->desired_access)
1168 )
1169 
1170 #define DEFINE_SMB3_OPEN_ENTER_EVENT(name)        \
1171 DEFINE_EVENT(smb3_open_enter_class, smb3_##name,  \
1172 	TP_PROTO(unsigned int xid,		\
1173 		__u32	tid,			\
1174 		__u64	sesid,			\
1175 		const char *full_path,		\
1176 		int	create_options,		\
1177 		int	desired_access),	\
1178 	TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access))
1179 
1180 DEFINE_SMB3_OPEN_ENTER_EVENT(open_enter);
1181 DEFINE_SMB3_OPEN_ENTER_EVENT(posix_mkdir_enter);
1182 
1183 DECLARE_EVENT_CLASS(smb3_open_err_class,
1184 	TP_PROTO(unsigned int xid,
1185 		__u32	tid,
1186 		__u64	sesid,
1187 		int	create_options,
1188 		int	desired_access,
1189 		int	rc),
1190 	TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
1191 	TP_STRUCT__entry(
1192 		__field(unsigned int, xid)
1193 		__field(__u32, tid)
1194 		__field(__u64, sesid)
1195 		__field(int,   create_options)
1196 		__field(int, desired_access)
1197 		__field(int, rc)
1198 	),
1199 	TP_fast_assign(
1200 		__entry->xid = xid;
1201 		__entry->tid = tid;
1202 		__entry->sesid = sesid;
1203 		__entry->create_options = create_options;
1204 		__entry->desired_access = desired_access;
1205 		__entry->rc = rc;
1206 	),
1207 	TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
1208 		__entry->xid, __entry->sesid, __entry->tid,
1209 		__entry->create_options, __entry->desired_access, __entry->rc)
1210 )
1211 
1212 #define DEFINE_SMB3_OPEN_ERR_EVENT(name)          \
1213 DEFINE_EVENT(smb3_open_err_class, smb3_##name,    \
1214 	TP_PROTO(unsigned int xid,		\
1215 		__u32	tid,			\
1216 		__u64	sesid,			\
1217 		int	create_options,		\
1218 		int	desired_access,		\
1219 		int	rc),			\
1220 	TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
1221 
1222 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
1223 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
1224 
1225 DECLARE_EVENT_CLASS(smb3_open_done_class,
1226 	TP_PROTO(unsigned int xid,
1227 		__u64	fid,
1228 		__u32	tid,
1229 		__u64	sesid,
1230 		int	create_options,
1231 		int	desired_access),
1232 	TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
1233 	TP_STRUCT__entry(
1234 		__field(unsigned int, xid)
1235 		__field(__u64, fid)
1236 		__field(__u32, tid)
1237 		__field(__u64, sesid)
1238 		__field(int, create_options)
1239 		__field(int, desired_access)
1240 	),
1241 	TP_fast_assign(
1242 		__entry->xid = xid;
1243 		__entry->fid = fid;
1244 		__entry->tid = tid;
1245 		__entry->sesid = sesid;
1246 		__entry->create_options = create_options;
1247 		__entry->desired_access = desired_access;
1248 	),
1249 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x",
1250 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
1251 		__entry->create_options, __entry->desired_access)
1252 )
1253 
1254 #define DEFINE_SMB3_OPEN_DONE_EVENT(name)        \
1255 DEFINE_EVENT(smb3_open_done_class, smb3_##name,  \
1256 	TP_PROTO(unsigned int xid,		\
1257 		__u64	fid,			\
1258 		__u32	tid,			\
1259 		__u64	sesid,			\
1260 		int	create_options,		\
1261 		int	desired_access),	\
1262 	TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
1263 
1264 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
1265 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
1266 
1267 
1268 DECLARE_EVENT_CLASS(smb3_lease_done_class,
1269 	TP_PROTO(__u32	lease_state,
1270 		__u32	tid,
1271 		__u64	sesid,
1272 		__u64	lease_key_low,
1273 		__u64	lease_key_high),
1274 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
1275 	TP_STRUCT__entry(
1276 		__field(__u32, lease_state)
1277 		__field(__u32, tid)
1278 		__field(__u64, sesid)
1279 		__field(__u64, lease_key_low)
1280 		__field(__u64, lease_key_high)
1281 	),
1282 	TP_fast_assign(
1283 		__entry->lease_state = lease_state;
1284 		__entry->tid = tid;
1285 		__entry->sesid = sesid;
1286 		__entry->lease_key_low = lease_key_low;
1287 		__entry->lease_key_high = lease_key_high;
1288 	),
1289 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
1290 		__entry->sesid, __entry->tid, __entry->lease_key_high,
1291 		__entry->lease_key_low, __entry->lease_state)
1292 )
1293 
1294 #define DEFINE_SMB3_LEASE_DONE_EVENT(name)        \
1295 DEFINE_EVENT(smb3_lease_done_class, smb3_##name,  \
1296 	TP_PROTO(__u32	lease_state,		\
1297 		__u32	tid,			\
1298 		__u64	sesid,			\
1299 		__u64	lease_key_low,		\
1300 		__u64	lease_key_high),	\
1301 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
1302 
1303 DEFINE_SMB3_LEASE_DONE_EVENT(lease_ack_done);
1304 /* Tracepoint when a lease break request is received/entered (includes epoch and flags) */
1305 DECLARE_EVENT_CLASS(smb3_lease_enter_class,
1306 	TP_PROTO(__u32 lease_state,
1307 		__u32 flags,
1308 		__u16 epoch,
1309 		__u32 tid,
1310 		__u64 sesid,
1311 		__u64 lease_key_low,
1312 		__u64 lease_key_high),
1313 	TP_ARGS(lease_state, flags, epoch, tid, sesid, lease_key_low, lease_key_high),
1314 	TP_STRUCT__entry(
1315 		__field(__u32, lease_state)
1316 		__field(__u32, flags)
1317 		__field(__u16, epoch)
1318 		__field(__u32, tid)
1319 		__field(__u64, sesid)
1320 		__field(__u64, lease_key_low)
1321 		__field(__u64, lease_key_high)
1322 	),
1323 	TP_fast_assign(
1324 		__entry->lease_state = lease_state;
1325 		__entry->flags = flags;
1326 		__entry->epoch = epoch;
1327 		__entry->tid = tid;
1328 		__entry->sesid = sesid;
1329 		__entry->lease_key_low = lease_key_low;
1330 		__entry->lease_key_high = lease_key_high;
1331 	),
1332 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x flags=0x%x epoch=%u",
1333 		__entry->sesid, __entry->tid, __entry->lease_key_high,
1334 		__entry->lease_key_low, __entry->lease_state, __entry->flags, __entry->epoch)
1335 )
1336 
1337 #define DEFINE_SMB3_LEASE_ENTER_EVENT(name)        \
1338 DEFINE_EVENT(smb3_lease_enter_class, smb3_##name,  \
1339 	TP_PROTO(__u32 lease_state,            \
1340 		__u32 flags,               \
1341 		__u16 epoch,               \
1342 		__u32 tid,                 \
1343 		__u64 sesid,               \
1344 		__u64 lease_key_low,       \
1345 		__u64 lease_key_high),     \
1346 	TP_ARGS(lease_state, flags, epoch, tid, sesid, lease_key_low, lease_key_high))
1347 
1348 DEFINE_SMB3_LEASE_ENTER_EVENT(lease_break_enter);
1349 /* Lease not found: reuse lease_enter payload (includes epoch and flags) */
1350 DEFINE_SMB3_LEASE_ENTER_EVENT(lease_not_found);
1351 
1352 DECLARE_EVENT_CLASS(smb3_lease_err_class,
1353 	TP_PROTO(__u32	lease_state,
1354 		__u32	tid,
1355 		__u64	sesid,
1356 		__u64	lease_key_low,
1357 		__u64	lease_key_high,
1358 		int	rc),
1359 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
1360 	TP_STRUCT__entry(
1361 		__field(__u32, lease_state)
1362 		__field(__u32, tid)
1363 		__field(__u64, sesid)
1364 		__field(__u64, lease_key_low)
1365 		__field(__u64, lease_key_high)
1366 		__field(int, rc)
1367 	),
1368 	TP_fast_assign(
1369 		__entry->lease_state = lease_state;
1370 		__entry->tid = tid;
1371 		__entry->sesid = sesid;
1372 		__entry->lease_key_low = lease_key_low;
1373 		__entry->lease_key_high = lease_key_high;
1374 		__entry->rc = rc;
1375 	),
1376 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
1377 		__entry->sesid, __entry->tid, __entry->lease_key_high,
1378 		__entry->lease_key_low, __entry->lease_state, __entry->rc)
1379 )
1380 
1381 #define DEFINE_SMB3_LEASE_ERR_EVENT(name)        \
1382 DEFINE_EVENT(smb3_lease_err_class, smb3_##name,  \
1383 	TP_PROTO(__u32	lease_state,		\
1384 		__u32	tid,			\
1385 		__u64	sesid,			\
1386 		__u64	lease_key_low,		\
1387 		__u64	lease_key_high,		\
1388 		int	rc),			\
1389 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
1390 
1391 DEFINE_SMB3_LEASE_ERR_EVENT(lease_ack_err);
1392 
1393 DECLARE_EVENT_CLASS(smb3_connect_class,
1394 	TP_PROTO(char *hostname,
1395 		__u64 conn_id,
1396 		const struct __kernel_sockaddr_storage *dst_addr),
1397 	TP_ARGS(hostname, conn_id, dst_addr),
1398 	TP_STRUCT__entry(
1399 		__string(hostname, hostname)
1400 		__field(__u64, conn_id)
1401 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1402 	),
1403 	TP_fast_assign(
1404 		struct sockaddr_storage *pss = NULL;
1405 
1406 		__entry->conn_id = conn_id;
1407 		pss = (struct sockaddr_storage *)__entry->dst_addr;
1408 		*pss = *dst_addr;
1409 		__assign_str(hostname);
1410 	),
1411 	TP_printk("conn_id=0x%llx server=%s addr=%pISpsfc",
1412 		__entry->conn_id,
1413 		__get_str(hostname),
1414 		__entry->dst_addr)
1415 )
1416 
1417 #define DEFINE_SMB3_CONNECT_EVENT(name)        \
1418 DEFINE_EVENT(smb3_connect_class, smb3_##name,  \
1419 	TP_PROTO(char *hostname,		\
1420 		__u64 conn_id,			\
1421 		const struct __kernel_sockaddr_storage *addr),	\
1422 	TP_ARGS(hostname, conn_id, addr))
1423 
1424 DEFINE_SMB3_CONNECT_EVENT(connect_done);
1425 DEFINE_SMB3_CONNECT_EVENT(smbd_connect_done);
1426 DEFINE_SMB3_CONNECT_EVENT(smbd_connect_err);
1427 
1428 DECLARE_EVENT_CLASS(smb3_connect_err_class,
1429 	TP_PROTO(char *hostname, __u64 conn_id,
1430 		const struct __kernel_sockaddr_storage *dst_addr, int rc),
1431 	TP_ARGS(hostname, conn_id, dst_addr, rc),
1432 	TP_STRUCT__entry(
1433 		__string(hostname, hostname)
1434 		__field(__u64, conn_id)
1435 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1436 		__field(int, rc)
1437 	),
1438 	TP_fast_assign(
1439 		struct sockaddr_storage *pss = NULL;
1440 
1441 		__entry->conn_id = conn_id;
1442 		__entry->rc = rc;
1443 		pss = (struct sockaddr_storage *)__entry->dst_addr;
1444 		*pss = *dst_addr;
1445 		__assign_str(hostname);
1446 	),
1447 	TP_printk("rc=%d conn_id=0x%llx server=%s addr=%pISpsfc",
1448 		__entry->rc,
1449 		__entry->conn_id,
1450 		__get_str(hostname),
1451 		__entry->dst_addr)
1452 )
1453 
1454 #define DEFINE_SMB3_CONNECT_ERR_EVENT(name)        \
1455 DEFINE_EVENT(smb3_connect_err_class, smb3_##name,  \
1456 	TP_PROTO(char *hostname,		\
1457 		__u64 conn_id,			\
1458 		const struct __kernel_sockaddr_storage *addr,	\
1459 		int rc),			\
1460 	TP_ARGS(hostname, conn_id, addr, rc))
1461 
1462 DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
1463 
1464 DECLARE_EVENT_CLASS(smb3_sess_setup_err_class,
1465 	TP_PROTO(char *hostname, char *username, __u64 conn_id,
1466 		const struct __kernel_sockaddr_storage *dst_addr, int rc),
1467 	TP_ARGS(hostname, username, conn_id, dst_addr, rc),
1468 	TP_STRUCT__entry(
1469 		__string(hostname, hostname)
1470 		__string(username, username)
1471 		__field(__u64, conn_id)
1472 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1473 		__field(int, rc)
1474 	),
1475 	TP_fast_assign(
1476 		struct sockaddr_storage *pss = NULL;
1477 
1478 		__entry->conn_id = conn_id;
1479 		__entry->rc = rc;
1480 		pss = (struct sockaddr_storage *)__entry->dst_addr;
1481 		*pss = *dst_addr;
1482 		__assign_str(hostname);
1483 		__assign_str(username);
1484 	),
1485 	TP_printk("rc=%d user=%s conn_id=0x%llx server=%s addr=%pISpsfc",
1486 		__entry->rc,
1487 		__get_str(username),
1488 		__entry->conn_id,
1489 		__get_str(hostname),
1490 		__entry->dst_addr)
1491 )
1492 
1493 #define DEFINE_SMB3_SES_SETUP_ERR_EVENT(name)        \
1494 DEFINE_EVENT(smb3_sess_setup_err_class, smb3_##name,  \
1495 	TP_PROTO(char *hostname,		\
1496 		char *username,			\
1497 		__u64 conn_id,			\
1498 		const struct __kernel_sockaddr_storage *addr,	\
1499 		int rc),			\
1500 	TP_ARGS(hostname, username, conn_id, addr, rc))
1501 
1502 DEFINE_SMB3_SES_SETUP_ERR_EVENT(key_expired);
1503 
1504 DECLARE_EVENT_CLASS(smb3_reconnect_class,
1505 	TP_PROTO(__u64	currmid,
1506 		__u64 conn_id,
1507 		char *hostname),
1508 	TP_ARGS(currmid, conn_id, hostname),
1509 	TP_STRUCT__entry(
1510 		__field(__u64, currmid)
1511 		__field(__u64, conn_id)
1512 		__string(hostname, hostname)
1513 	),
1514 	TP_fast_assign(
1515 		__entry->currmid = currmid;
1516 		__entry->conn_id = conn_id;
1517 		__assign_str(hostname);
1518 	),
1519 	TP_printk("conn_id=0x%llx server=%s current_mid=%llu",
1520 		__entry->conn_id,
1521 		__get_str(hostname),
1522 		__entry->currmid)
1523 )
1524 
1525 #define DEFINE_SMB3_RECONNECT_EVENT(name)        \
1526 DEFINE_EVENT(smb3_reconnect_class, smb3_##name,  \
1527 	TP_PROTO(__u64	currmid,		\
1528 		__u64 conn_id,			\
1529 		char *hostname),				\
1530 	TP_ARGS(currmid, conn_id, hostname))
1531 
1532 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
1533 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
1534 
1535 DECLARE_EVENT_CLASS(smb3_ses_class,
1536 	TP_PROTO(__u64	sesid),
1537 	TP_ARGS(sesid),
1538 	TP_STRUCT__entry(
1539 		__field(__u64, sesid)
1540 	),
1541 	TP_fast_assign(
1542 		__entry->sesid = sesid;
1543 	),
1544 	TP_printk("sid=0x%llx",
1545 		__entry->sesid)
1546 )
1547 
1548 #define DEFINE_SMB3_SES_EVENT(name)        \
1549 DEFINE_EVENT(smb3_ses_class, smb3_##name,  \
1550 	TP_PROTO(__u64	sesid),				\
1551 	TP_ARGS(sesid))
1552 
1553 DEFINE_SMB3_SES_EVENT(ses_not_found);
1554 
1555 DECLARE_EVENT_CLASS(smb3_ioctl_class,
1556 	TP_PROTO(unsigned int xid,
1557 		__u64	fid,
1558 		unsigned int command),
1559 	TP_ARGS(xid, fid, command),
1560 	TP_STRUCT__entry(
1561 		__field(unsigned int, xid)
1562 		__field(__u64, fid)
1563 		__field(unsigned int, command)
1564 	),
1565 	TP_fast_assign(
1566 		__entry->xid = xid;
1567 		__entry->fid = fid;
1568 		__entry->command = command;
1569 	),
1570 	TP_printk("xid=%u fid=0x%llx ioctl cmd=0x%x",
1571 		  __entry->xid, __entry->fid, __entry->command)
1572 )
1573 
1574 #define DEFINE_SMB3_IOCTL_EVENT(name)        \
1575 DEFINE_EVENT(smb3_ioctl_class, smb3_##name,  \
1576 	TP_PROTO(unsigned int xid,	     \
1577 		__u64 fid,		     \
1578 		unsigned int command),	     \
1579 	TP_ARGS(xid, fid, command))
1580 
1581 DEFINE_SMB3_IOCTL_EVENT(ioctl);
1582 
1583 DECLARE_EVENT_CLASS(smb3_shutdown_class,
1584 	TP_PROTO(__u32 flags,
1585 		__u32 tid),
1586 	TP_ARGS(flags, tid),
1587 	TP_STRUCT__entry(
1588 		__field(__u32, flags)
1589 		__field(__u32, tid)
1590 	),
1591 	TP_fast_assign(
1592 		__entry->flags = flags;
1593 		__entry->tid = tid;
1594 	),
1595 	TP_printk("flags=0x%x tid=0x%x",
1596 		  __entry->flags, __entry->tid)
1597 )
1598 
1599 #define DEFINE_SMB3_SHUTDOWN_EVENT(name)        \
1600 DEFINE_EVENT(smb3_shutdown_class, smb3_##name,  \
1601 	TP_PROTO(__u32 flags,		     \
1602 		__u32 tid),		     \
1603 	TP_ARGS(flags, tid))
1604 
1605 DEFINE_SMB3_SHUTDOWN_EVENT(shutdown_enter);
1606 DEFINE_SMB3_SHUTDOWN_EVENT(shutdown_done);
1607 
1608 DECLARE_EVENT_CLASS(smb3_shutdown_err_class,
1609 	TP_PROTO(int rc,
1610 		__u32 flags,
1611 		__u32 tid),
1612 	TP_ARGS(rc, flags, tid),
1613 	TP_STRUCT__entry(
1614 		__field(int, rc)
1615 		__field(__u32, flags)
1616 		__field(__u32, tid)
1617 	),
1618 	TP_fast_assign(
1619 		__entry->rc = rc;
1620 		__entry->flags = flags;
1621 		__entry->tid = tid;
1622 	),
1623 	TP_printk("rc=%d flags=0x%x tid=0x%x",
1624 		__entry->rc, __entry->flags, __entry->tid)
1625 )
1626 
1627 #define DEFINE_SMB3_SHUTDOWN_ERR_EVENT(name)        \
1628 DEFINE_EVENT(smb3_shutdown_err_class, smb3_##name,  \
1629 	TP_PROTO(int rc,		     \
1630 		__u32 flags,		     \
1631 		__u32 tid),		     \
1632 	TP_ARGS(rc, flags, tid))
1633 
1634 DEFINE_SMB3_SHUTDOWN_ERR_EVENT(shutdown_err);
1635 
1636 DECLARE_EVENT_CLASS(smb3_credit_class,
1637 	TP_PROTO(__u64	currmid,
1638 		__u64 conn_id,
1639 		char *hostname,
1640 		int credits,
1641 		int credits_to_add,
1642 		int in_flight),
1643 	TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight),
1644 	TP_STRUCT__entry(
1645 		__field(__u64, currmid)
1646 		__field(__u64, conn_id)
1647 		__string(hostname, hostname)
1648 		__field(int, credits)
1649 		__field(int, credits_to_add)
1650 		__field(int, in_flight)
1651 	),
1652 	TP_fast_assign(
1653 		__entry->currmid = currmid;
1654 		__entry->conn_id = conn_id;
1655 		__assign_str(hostname);
1656 		__entry->credits = credits;
1657 		__entry->credits_to_add = credits_to_add;
1658 		__entry->in_flight = in_flight;
1659 	),
1660 	TP_printk("conn_id=0x%llx server=%s current_mid=%llu "
1661 			"credits=%d credit_change=%d in_flight=%d",
1662 		__entry->conn_id,
1663 		__get_str(hostname),
1664 		__entry->currmid,
1665 		__entry->credits,
1666 		__entry->credits_to_add,
1667 		__entry->in_flight)
1668 )
1669 
1670 #define DEFINE_SMB3_CREDIT_EVENT(name)        \
1671 DEFINE_EVENT(smb3_credit_class, smb3_##name,  \
1672 	TP_PROTO(__u64	currmid,		\
1673 		__u64 conn_id,			\
1674 		char *hostname,			\
1675 		int  credits,			\
1676 		int  credits_to_add,	\
1677 		int in_flight),			\
1678 	TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight))
1679 
1680 DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
1681 DEFINE_SMB3_CREDIT_EVENT(reconnect_detected);
1682 DEFINE_SMB3_CREDIT_EVENT(credit_timeout);
1683 DEFINE_SMB3_CREDIT_EVENT(insufficient_credits);
1684 DEFINE_SMB3_CREDIT_EVENT(too_many_credits);
1685 DEFINE_SMB3_CREDIT_EVENT(add_credits);
1686 DEFINE_SMB3_CREDIT_EVENT(adj_credits);
1687 DEFINE_SMB3_CREDIT_EVENT(hdr_credits);
1688 DEFINE_SMB3_CREDIT_EVENT(nblk_credits);
1689 DEFINE_SMB3_CREDIT_EVENT(pend_credits);
1690 DEFINE_SMB3_CREDIT_EVENT(wait_credits);
1691 DEFINE_SMB3_CREDIT_EVENT(waitff_credits);
1692 DEFINE_SMB3_CREDIT_EVENT(overflow_credits);
1693 DEFINE_SMB3_CREDIT_EVENT(set_credits);
1694 
1695 TRACE_EVENT(smb3_kerberos_auth,
1696 		TP_PROTO(struct TCP_Server_Info *server,
1697 			 struct cifs_ses *ses,
1698 			 int rc),
1699 		TP_ARGS(server, ses, rc),
1700 		TP_STRUCT__entry(
1701 			__field(pid_t, pid)
1702 			__field(uid_t, uid)
1703 			__field(uid_t, cruid)
1704 			__string(host, server->hostname)
1705 			__string(user, ses->user_name)
1706 			__array(__u8, addr, sizeof(struct sockaddr_storage))
1707 			__array(char, sec, sizeof("ntlmsspi"))
1708 			__array(char, upcall_target, sizeof("mount"))
1709 			__field(int, rc)
1710 		),
1711 		TP_fast_assign(
1712 			__entry->pid = current->pid;
1713 			__entry->uid = from_kuid_munged(&init_user_ns, ses->linux_uid);
1714 			__entry->cruid = from_kuid_munged(&init_user_ns, ses->cred_uid);
1715 			__assign_str(host);
1716 			__assign_str(user);
1717 			memcpy(__entry->addr, &server->dstaddr, sizeof(__entry->addr));
1718 
1719 			if (server->sec_kerberos)
1720 				memcpy(__entry->sec, "krb5", sizeof("krb5"));
1721 			else if (server->sec_mskerberos)
1722 				memcpy(__entry->sec, "mskrb5", sizeof("mskrb5"));
1723 			else if (server->sec_iakerb)
1724 				memcpy(__entry->sec, "iakerb", sizeof("iakerb"));
1725 			else
1726 				memcpy(__entry->sec, "krb5", sizeof("krb5"));
1727 
1728 			if (ses->upcall_target == UPTARGET_MOUNT)
1729 				memcpy(__entry->upcall_target, "mount", sizeof("mount"));
1730 			else
1731 				memcpy(__entry->upcall_target, "app", sizeof("app"));
1732 			__entry->rc = rc;
1733 		),
1734 		TP_printk("vers=%d host=%s ip=%pISpsfc sec=%s uid=%d cruid=%d user=%s pid=%d upcall_target=%s err=%d",
1735 			  CIFS_SPNEGO_UPCALL_VERSION, __get_str(host), __entry->addr,
1736 			  __entry->sec, __entry->uid, __entry->cruid, __get_str(user),
1737 			  __entry->pid, __entry->upcall_target, __entry->rc))
1738 
1739 TRACE_EVENT(smb3_tcon_ref,
1740 	    TP_PROTO(unsigned int tcon_debug_id, int ref,
1741 		     enum smb3_tcon_ref_trace trace),
1742 	    TP_ARGS(tcon_debug_id, ref, trace),
1743 	    TP_STRUCT__entry(
1744 		    __field(unsigned int,		tcon)
1745 		    __field(int,			ref)
1746 		    __field(enum smb3_tcon_ref_trace,	trace)
1747 			     ),
1748 	    TP_fast_assign(
1749 		    __entry->tcon	= tcon_debug_id;
1750 		    __entry->ref	= ref;
1751 		    __entry->trace	= trace;
1752 			   ),
1753 	    TP_printk("TC=%08x %s r=%u",
1754 		      __entry->tcon,
1755 		      __print_symbolic(__entry->trace, smb3_tcon_ref_traces),
1756 		      __entry->ref)
1757 	    );
1758 
1759 TRACE_EVENT(smb3_rw_credits,
1760 	    TP_PROTO(unsigned int rreq_debug_id,
1761 		     unsigned int subreq_debug_index,
1762 		     unsigned int subreq_credits,
1763 		     unsigned int server_credits,
1764 		     int server_in_flight,
1765 		     int credit_change,
1766 		     enum smb3_rw_credits_trace trace),
1767 	    TP_ARGS(rreq_debug_id, subreq_debug_index, subreq_credits,
1768 		    server_credits, server_in_flight, credit_change, trace),
1769 	    TP_STRUCT__entry(
1770 		    __field(unsigned int, rreq_debug_id)
1771 		    __field(unsigned int, subreq_debug_index)
1772 		    __field(unsigned int, subreq_credits)
1773 		    __field(unsigned int, server_credits)
1774 		    __field(int,	  in_flight)
1775 		    __field(int,	  credit_change)
1776 		    __field(enum smb3_rw_credits_trace, trace)
1777 			     ),
1778 	    TP_fast_assign(
1779 		    __entry->rreq_debug_id	= rreq_debug_id;
1780 		    __entry->subreq_debug_index	= subreq_debug_index;
1781 		    __entry->subreq_credits	= subreq_credits;
1782 		    __entry->server_credits	= server_credits;
1783 		    __entry->in_flight		= server_in_flight;
1784 		    __entry->credit_change	= credit_change;
1785 		    __entry->trace		= trace;
1786 			   ),
1787 	    TP_printk("R=%08x[%x] %s cred=%u chg=%d pool=%u ifl=%d",
1788 		      __entry->rreq_debug_id, __entry->subreq_debug_index,
1789 		      __print_symbolic(__entry->trace, smb3_rw_credits_traces),
1790 		      __entry->subreq_credits, __entry->credit_change,
1791 		      __entry->server_credits, __entry->in_flight)
1792 	    );
1793 
1794 TRACE_EVENT(smb3_eio,
1795 	    TP_PROTO(enum smb_eio_trace trace, unsigned long info, unsigned long info2),
1796 	    TP_ARGS(trace, info, info2),
1797 	    TP_STRUCT__entry(
1798 		    __field(enum smb_eio_trace,	trace)
1799 		    __field(unsigned long,	info)
1800 		    __field(unsigned long,	info2)
1801 			     ),
1802 	    TP_fast_assign(
1803 		    __entry->trace	= trace;
1804 		    __entry->info	= info;
1805 		    __entry->info2	= info2;
1806 			   ),
1807 	    TP_printk("%s info=%lx,%lx",
1808 		      __print_symbolic(__entry->trace, smb_eio_traces),
1809 		      __entry->info, __entry->info2)
1810 	    );
1811 
1812 #undef EM
1813 #undef E_
1814 #endif /* _CIFS_TRACE_H */
1815 
1816 #undef TRACE_INCLUDE_PATH
1817 #define TRACE_INCLUDE_PATH .
1818 #define TRACE_INCLUDE_FILE trace
1819 #include <trace/define_trace.h>
1820