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 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM cifs
9 
10 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
11 #define _CIFS_TRACE_H
12 
13 #include <linux/tracepoint.h>
14 #include <linux/net.h>
15 #include <linux/inet.h>
16 
17 /*
18  * Please use this 3-part article as a reference for writing new tracepoints:
19  * https://lwn.net/Articles/379903/
20  */
21 
22 /* For logging errors in read or write */
23 DECLARE_EVENT_CLASS(smb3_rw_err_class,
24 	TP_PROTO(unsigned int xid,
25 		__u64	fid,
26 		__u32	tid,
27 		__u64	sesid,
28 		__u64	offset,
29 		__u32	len,
30 		int	rc),
31 	TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
32 	TP_STRUCT__entry(
33 		__field(unsigned int, xid)
34 		__field(__u64, fid)
35 		__field(__u32, tid)
36 		__field(__u64, sesid)
37 		__field(__u64, offset)
38 		__field(__u32, len)
39 		__field(int, rc)
40 	),
41 	TP_fast_assign(
42 		__entry->xid = xid;
43 		__entry->fid = fid;
44 		__entry->tid = tid;
45 		__entry->sesid = sesid;
46 		__entry->offset = offset;
47 		__entry->len = len;
48 		__entry->rc = rc;
49 	),
50 	TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
51 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
52 		__entry->offset, __entry->len, __entry->rc)
53 )
54 
55 #define DEFINE_SMB3_RW_ERR_EVENT(name)          \
56 DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
57 	TP_PROTO(unsigned int xid,		\
58 		__u64	fid,			\
59 		__u32	tid,			\
60 		__u64	sesid,			\
61 		__u64	offset,			\
62 		__u32	len,			\
63 		int	rc),			\
64 	TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
65 
66 DEFINE_SMB3_RW_ERR_EVENT(write_err);
67 DEFINE_SMB3_RW_ERR_EVENT(read_err);
68 DEFINE_SMB3_RW_ERR_EVENT(query_dir_err);
69 DEFINE_SMB3_RW_ERR_EVENT(zero_err);
70 DEFINE_SMB3_RW_ERR_EVENT(falloc_err);
71 
72 
73 /* For logging successful read or write */
74 DECLARE_EVENT_CLASS(smb3_rw_done_class,
75 	TP_PROTO(unsigned int xid,
76 		__u64	fid,
77 		__u32	tid,
78 		__u64	sesid,
79 		__u64	offset,
80 		__u32	len),
81 	TP_ARGS(xid, fid, tid, sesid, offset, len),
82 	TP_STRUCT__entry(
83 		__field(unsigned int, xid)
84 		__field(__u64, fid)
85 		__field(__u32, tid)
86 		__field(__u64, sesid)
87 		__field(__u64, offset)
88 		__field(__u32, len)
89 	),
90 	TP_fast_assign(
91 		__entry->xid = xid;
92 		__entry->fid = fid;
93 		__entry->tid = tid;
94 		__entry->sesid = sesid;
95 		__entry->offset = offset;
96 		__entry->len = len;
97 	),
98 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
99 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
100 		__entry->offset, __entry->len)
101 )
102 
103 #define DEFINE_SMB3_RW_DONE_EVENT(name)         \
104 DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
105 	TP_PROTO(unsigned int xid,		\
106 		__u64	fid,			\
107 		__u32	tid,			\
108 		__u64	sesid,			\
109 		__u64	offset,			\
110 		__u32	len),			\
111 	TP_ARGS(xid, fid, tid, sesid, offset, len))
112 
113 DEFINE_SMB3_RW_DONE_EVENT(write_enter);
114 DEFINE_SMB3_RW_DONE_EVENT(read_enter);
115 DEFINE_SMB3_RW_DONE_EVENT(query_dir_enter);
116 DEFINE_SMB3_RW_DONE_EVENT(zero_enter);
117 DEFINE_SMB3_RW_DONE_EVENT(falloc_enter);
118 DEFINE_SMB3_RW_DONE_EVENT(write_done);
119 DEFINE_SMB3_RW_DONE_EVENT(read_done);
120 DEFINE_SMB3_RW_DONE_EVENT(query_dir_done);
121 DEFINE_SMB3_RW_DONE_EVENT(zero_done);
122 DEFINE_SMB3_RW_DONE_EVENT(falloc_done);
123 
124 /* For logging successful set EOF (truncate) */
125 DECLARE_EVENT_CLASS(smb3_eof_class,
126 	TP_PROTO(unsigned int xid,
127 		__u64	fid,
128 		__u32	tid,
129 		__u64	sesid,
130 		__u64	offset),
131 	TP_ARGS(xid, fid, tid, sesid, offset),
132 	TP_STRUCT__entry(
133 		__field(unsigned int, xid)
134 		__field(__u64, fid)
135 		__field(__u32, tid)
136 		__field(__u64, sesid)
137 		__field(__u64, offset)
138 	),
139 	TP_fast_assign(
140 		__entry->xid = xid;
141 		__entry->fid = fid;
142 		__entry->tid = tid;
143 		__entry->sesid = sesid;
144 		__entry->offset = offset;
145 	),
146 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx",
147 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
148 		__entry->offset)
149 )
150 
151 #define DEFINE_SMB3_EOF_EVENT(name)         \
152 DEFINE_EVENT(smb3_eof_class, smb3_##name,   \
153 	TP_PROTO(unsigned int xid,		\
154 		__u64	fid,			\
155 		__u32	tid,			\
156 		__u64	sesid,			\
157 		__u64	offset),		\
158 	TP_ARGS(xid, fid, tid, sesid, offset))
159 
160 DEFINE_SMB3_EOF_EVENT(set_eof);
161 
162 /*
163  * For handle based calls other than read and write, and get/set info
164  */
165 DECLARE_EVENT_CLASS(smb3_fd_class,
166 	TP_PROTO(unsigned int xid,
167 		__u64	fid,
168 		__u32	tid,
169 		__u64	sesid),
170 	TP_ARGS(xid, fid, tid, sesid),
171 	TP_STRUCT__entry(
172 		__field(unsigned int, xid)
173 		__field(__u64, fid)
174 		__field(__u32, tid)
175 		__field(__u64, sesid)
176 	),
177 	TP_fast_assign(
178 		__entry->xid = xid;
179 		__entry->fid = fid;
180 		__entry->tid = tid;
181 		__entry->sesid = sesid;
182 	),
183 	TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx",
184 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid)
185 )
186 
187 #define DEFINE_SMB3_FD_EVENT(name)          \
188 DEFINE_EVENT(smb3_fd_class, smb3_##name,    \
189 	TP_PROTO(unsigned int xid,		\
190 		__u64	fid,			\
191 		__u32	tid,			\
192 		__u64	sesid),			\
193 	TP_ARGS(xid, fid, tid, sesid))
194 
195 DEFINE_SMB3_FD_EVENT(flush_enter);
196 DEFINE_SMB3_FD_EVENT(flush_done);
197 DEFINE_SMB3_FD_EVENT(close_enter);
198 DEFINE_SMB3_FD_EVENT(close_done);
199 DEFINE_SMB3_FD_EVENT(oplock_not_found);
200 
201 DECLARE_EVENT_CLASS(smb3_fd_err_class,
202 	TP_PROTO(unsigned int xid,
203 		__u64	fid,
204 		__u32	tid,
205 		__u64	sesid,
206 		int	rc),
207 	TP_ARGS(xid, fid, tid, sesid, rc),
208 	TP_STRUCT__entry(
209 		__field(unsigned int, xid)
210 		__field(__u64, fid)
211 		__field(__u32, tid)
212 		__field(__u64, sesid)
213 		__field(int, rc)
214 	),
215 	TP_fast_assign(
216 		__entry->xid = xid;
217 		__entry->fid = fid;
218 		__entry->tid = tid;
219 		__entry->sesid = sesid;
220 		__entry->rc = rc;
221 	),
222 	TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
223 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
224 		__entry->rc)
225 )
226 
227 #define DEFINE_SMB3_FD_ERR_EVENT(name)          \
228 DEFINE_EVENT(smb3_fd_err_class, smb3_##name,    \
229 	TP_PROTO(unsigned int xid,		\
230 		__u64	fid,			\
231 		__u32	tid,			\
232 		__u64	sesid,			\
233 		int	rc),			\
234 	TP_ARGS(xid, fid, tid, sesid, rc))
235 
236 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
237 DEFINE_SMB3_FD_ERR_EVENT(lock_err);
238 DEFINE_SMB3_FD_ERR_EVENT(close_err);
239 
240 /*
241  * For handle based query/set info calls
242  */
243 DECLARE_EVENT_CLASS(smb3_inf_enter_class,
244 	TP_PROTO(unsigned int xid,
245 		__u64	fid,
246 		__u32	tid,
247 		__u64	sesid,
248 		__u8	infclass,
249 		__u32	type),
250 	TP_ARGS(xid, fid, tid, sesid, infclass, type),
251 	TP_STRUCT__entry(
252 		__field(unsigned int, xid)
253 		__field(__u64, fid)
254 		__field(__u32, tid)
255 		__field(__u64, sesid)
256 		__field(__u8, infclass)
257 		__field(__u32, type)
258 	),
259 	TP_fast_assign(
260 		__entry->xid = xid;
261 		__entry->fid = fid;
262 		__entry->tid = tid;
263 		__entry->sesid = sesid;
264 		__entry->infclass = infclass;
265 		__entry->type = type;
266 	),
267 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x",
268 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
269 		__entry->infclass, __entry->type)
270 )
271 
272 #define DEFINE_SMB3_INF_ENTER_EVENT(name)          \
273 DEFINE_EVENT(smb3_inf_enter_class, smb3_##name,    \
274 	TP_PROTO(unsigned int xid,		\
275 		__u64	fid,			\
276 		__u32	tid,			\
277 		__u64	sesid,			\
278 		__u8	infclass,		\
279 		__u32	type),			\
280 	TP_ARGS(xid, fid, tid, sesid, infclass, type))
281 
282 DEFINE_SMB3_INF_ENTER_EVENT(query_info_enter);
283 DEFINE_SMB3_INF_ENTER_EVENT(query_info_done);
284 DEFINE_SMB3_INF_ENTER_EVENT(notify_enter);
285 DEFINE_SMB3_INF_ENTER_EVENT(notify_done);
286 
287 DECLARE_EVENT_CLASS(smb3_inf_err_class,
288 	TP_PROTO(unsigned int xid,
289 		__u64	fid,
290 		__u32	tid,
291 		__u64	sesid,
292 		__u8	infclass,
293 		__u32	type,
294 		int	rc),
295 	TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
296 	TP_STRUCT__entry(
297 		__field(unsigned int, xid)
298 		__field(__u64, fid)
299 		__field(__u32, tid)
300 		__field(__u64, sesid)
301 		__field(__u8, infclass)
302 		__field(__u32, type)
303 		__field(int, rc)
304 	),
305 	TP_fast_assign(
306 		__entry->xid = xid;
307 		__entry->fid = fid;
308 		__entry->tid = tid;
309 		__entry->sesid = sesid;
310 		__entry->infclass = infclass;
311 		__entry->type = type;
312 		__entry->rc = rc;
313 	),
314 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
315 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
316 		__entry->infclass, __entry->type, __entry->rc)
317 )
318 
319 #define DEFINE_SMB3_INF_ERR_EVENT(name)          \
320 DEFINE_EVENT(smb3_inf_err_class, smb3_##name,    \
321 	TP_PROTO(unsigned int xid,		\
322 		__u64	fid,			\
323 		__u32	tid,			\
324 		__u64	sesid,			\
325 		__u8	infclass,		\
326 		__u32	type,			\
327 		int	rc),			\
328 	TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
329 
330 DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
331 DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
332 DEFINE_SMB3_INF_ERR_EVENT(notify_err);
333 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
334 
335 DECLARE_EVENT_CLASS(smb3_inf_compound_enter_class,
336 	TP_PROTO(unsigned int xid,
337 		__u32	tid,
338 		__u64	sesid,
339 		const char *full_path),
340 	TP_ARGS(xid, tid, sesid, full_path),
341 	TP_STRUCT__entry(
342 		__field(unsigned int, xid)
343 		__field(__u32, tid)
344 		__field(__u64, sesid)
345 		__string(path, full_path)
346 	),
347 	TP_fast_assign(
348 		__entry->xid = xid;
349 		__entry->tid = tid;
350 		__entry->sesid = sesid;
351 		__assign_str(path, full_path);
352 	),
353 	TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s",
354 		__entry->xid, __entry->sesid, __entry->tid,
355 		__get_str(path))
356 )
357 
358 #define DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(name)     \
359 DEFINE_EVENT(smb3_inf_compound_enter_class, smb3_##name,    \
360 	TP_PROTO(unsigned int xid,		\
361 		__u32	tid,			\
362 		__u64	sesid,			\
363 		const char *full_path),		\
364 	TP_ARGS(xid, tid, sesid, full_path))
365 
366 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_info_compound_enter);
367 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(posix_query_info_compound_enter);
368 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(hardlink_enter);
369 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rename_enter);
370 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rmdir_enter);
371 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_eof_enter);
372 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_info_compound_enter);
373 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(delete_enter);
374 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mkdir_enter);
375 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(tdis_enter);
376 
377 
378 DECLARE_EVENT_CLASS(smb3_inf_compound_done_class,
379 	TP_PROTO(unsigned int xid,
380 		__u32	tid,
381 		__u64	sesid),
382 	TP_ARGS(xid, tid, sesid),
383 	TP_STRUCT__entry(
384 		__field(unsigned int, xid)
385 		__field(__u32, tid)
386 		__field(__u64, sesid)
387 	),
388 	TP_fast_assign(
389 		__entry->xid = xid;
390 		__entry->tid = tid;
391 		__entry->sesid = sesid;
392 	),
393 	TP_printk("xid=%u sid=0x%llx tid=0x%x",
394 		__entry->xid, __entry->sesid, __entry->tid)
395 )
396 
397 #define DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(name)     \
398 DEFINE_EVENT(smb3_inf_compound_done_class, smb3_##name,    \
399 	TP_PROTO(unsigned int xid,		\
400 		__u32	tid,			\
401 		__u64	sesid),			\
402 	TP_ARGS(xid, tid, sesid))
403 
404 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_info_compound_done);
405 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(posix_query_info_compound_done);
406 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(hardlink_done);
407 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rename_done);
408 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rmdir_done);
409 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_eof_done);
410 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_info_compound_done);
411 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(delete_done);
412 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mkdir_done);
413 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(tdis_done);
414 
415 
416 DECLARE_EVENT_CLASS(smb3_inf_compound_err_class,
417 	TP_PROTO(unsigned int xid,
418 		__u32	tid,
419 		__u64	sesid,
420 		int	rc),
421 	TP_ARGS(xid, tid, sesid, rc),
422 	TP_STRUCT__entry(
423 		__field(unsigned int, xid)
424 		__field(__u32, tid)
425 		__field(__u64, sesid)
426 		__field(int, rc)
427 	),
428 	TP_fast_assign(
429 		__entry->xid = xid;
430 		__entry->tid = tid;
431 		__entry->sesid = sesid;
432 		__entry->rc = rc;
433 	),
434 	TP_printk("xid=%u sid=0x%llx tid=0x%x rc=%d",
435 		__entry->xid, __entry->sesid, __entry->tid,
436 		__entry->rc)
437 )
438 
439 #define DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(name)     \
440 DEFINE_EVENT(smb3_inf_compound_err_class, smb3_##name,    \
441 	TP_PROTO(unsigned int xid,		\
442 		__u32	tid,			\
443 		__u64	sesid,			\
444 		int rc),			\
445 	TP_ARGS(xid, tid, sesid, rc))
446 
447 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_info_compound_err);
448 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(posix_query_info_compound_err);
449 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(hardlink_err);
450 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rename_err);
451 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rmdir_err);
452 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_eof_err);
453 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_info_compound_err);
454 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mkdir_err);
455 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(delete_err);
456 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(tdis_err);
457 
458 /*
459  * For logging SMB3 Status code and Command for responses which return errors
460  */
461 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
462 	TP_PROTO(__u32	tid,
463 		__u64	sesid,
464 		__u16	cmd,
465 		__u64	mid,
466 		__u32	status,
467 		int	rc),
468 	TP_ARGS(tid, sesid, cmd, mid, status, rc),
469 	TP_STRUCT__entry(
470 		__field(__u32, tid)
471 		__field(__u64, sesid)
472 		__field(__u16, cmd)
473 		__field(__u64, mid)
474 		__field(__u32, status)
475 		__field(int, rc)
476 	),
477 	TP_fast_assign(
478 		__entry->tid = tid;
479 		__entry->sesid = sesid;
480 		__entry->cmd = cmd;
481 		__entry->mid = mid;
482 		__entry->status = status;
483 		__entry->rc = rc;
484 	),
485 	TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
486 		__entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
487 		__entry->status, __entry->rc)
488 )
489 
490 #define DEFINE_SMB3_CMD_ERR_EVENT(name)          \
491 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name,    \
492 	TP_PROTO(__u32	tid,			\
493 		__u64	sesid,			\
494 		__u16	cmd,			\
495 		__u64	mid,			\
496 		__u32	status,			\
497 		int	rc),			\
498 	TP_ARGS(tid, sesid, cmd, mid, status, rc))
499 
500 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
501 
502 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
503 	TP_PROTO(__u32	tid,
504 		__u64	sesid,
505 		__u16	cmd,
506 		__u64	mid),
507 	TP_ARGS(tid, sesid, cmd, mid),
508 	TP_STRUCT__entry(
509 		__field(__u32, tid)
510 		__field(__u64, sesid)
511 		__field(__u16, cmd)
512 		__field(__u64, mid)
513 	),
514 	TP_fast_assign(
515 		__entry->tid = tid;
516 		__entry->sesid = sesid;
517 		__entry->cmd = cmd;
518 		__entry->mid = mid;
519 	),
520 	TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu",
521 		__entry->sesid, __entry->tid,
522 		__entry->cmd, __entry->mid)
523 )
524 
525 #define DEFINE_SMB3_CMD_DONE_EVENT(name)          \
526 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name,    \
527 	TP_PROTO(__u32	tid,			\
528 		__u64	sesid,			\
529 		__u16	cmd,			\
530 		__u64	mid),			\
531 	TP_ARGS(tid, sesid, cmd, mid))
532 
533 DEFINE_SMB3_CMD_DONE_EVENT(cmd_enter);
534 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
535 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
536 
537 DECLARE_EVENT_CLASS(smb3_mid_class,
538 	TP_PROTO(__u16	cmd,
539 		__u64	mid,
540 		__u32	pid,
541 		unsigned long when_sent,
542 		unsigned long when_received),
543 	TP_ARGS(cmd, mid, pid, when_sent, when_received),
544 	TP_STRUCT__entry(
545 		__field(__u16, cmd)
546 		__field(__u64, mid)
547 		__field(__u32, pid)
548 		__field(unsigned long, when_sent)
549 		__field(unsigned long, when_received)
550 	),
551 	TP_fast_assign(
552 		__entry->cmd = cmd;
553 		__entry->mid = mid;
554 		__entry->pid = pid;
555 		__entry->when_sent = when_sent;
556 		__entry->when_received = when_received;
557 	),
558 	TP_printk("\tcmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
559 		__entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
560 		__entry->when_received)
561 )
562 
563 #define DEFINE_SMB3_MID_EVENT(name)          \
564 DEFINE_EVENT(smb3_mid_class, smb3_##name,    \
565 	TP_PROTO(__u16	cmd,			\
566 		__u64	mid,			\
567 		__u32	pid,			\
568 		unsigned long when_sent,	\
569 		unsigned long when_received),	\
570 	TP_ARGS(cmd, mid, pid, when_sent, when_received))
571 
572 DEFINE_SMB3_MID_EVENT(slow_rsp);
573 
574 DECLARE_EVENT_CLASS(smb3_exit_err_class,
575 	TP_PROTO(unsigned int xid,
576 		const char *func_name,
577 		int	rc),
578 	TP_ARGS(xid, func_name, rc),
579 	TP_STRUCT__entry(
580 		__field(unsigned int, xid)
581 		__string(func_name, func_name)
582 		__field(int, rc)
583 	),
584 	TP_fast_assign(
585 		__entry->xid = xid;
586 		__assign_str(func_name, func_name);
587 		__entry->rc = rc;
588 	),
589 	TP_printk("\t%s: xid=%u rc=%d",
590 		__get_str(func_name), __entry->xid, __entry->rc)
591 )
592 
593 #define DEFINE_SMB3_EXIT_ERR_EVENT(name)          \
594 DEFINE_EVENT(smb3_exit_err_class, smb3_##name,    \
595 	TP_PROTO(unsigned int xid,		\
596 		const char *func_name,		\
597 		int	rc),			\
598 	TP_ARGS(xid, func_name, rc))
599 
600 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
601 
602 
603 DECLARE_EVENT_CLASS(smb3_sync_err_class,
604 	TP_PROTO(unsigned long ino,
605 		int	rc),
606 	TP_ARGS(ino, rc),
607 	TP_STRUCT__entry(
608 		__field(unsigned long, ino)
609 		__field(int, rc)
610 	),
611 	TP_fast_assign(
612 		__entry->ino = ino;
613 		__entry->rc = rc;
614 	),
615 	TP_printk("\tino=%lu rc=%d",
616 		__entry->ino, __entry->rc)
617 )
618 
619 #define DEFINE_SMB3_SYNC_ERR_EVENT(name)          \
620 DEFINE_EVENT(smb3_sync_err_class, cifs_##name,    \
621 	TP_PROTO(unsigned long ino,		\
622 		int	rc),			\
623 	TP_ARGS(ino, rc))
624 
625 DEFINE_SMB3_SYNC_ERR_EVENT(fsync_err);
626 DEFINE_SMB3_SYNC_ERR_EVENT(flush_err);
627 
628 
629 DECLARE_EVENT_CLASS(smb3_enter_exit_class,
630 	TP_PROTO(unsigned int xid,
631 		const char *func_name),
632 	TP_ARGS(xid, func_name),
633 	TP_STRUCT__entry(
634 		__field(unsigned int, xid)
635 		__string(func_name, func_name)
636 	),
637 	TP_fast_assign(
638 		__entry->xid = xid;
639 		__assign_str(func_name, func_name);
640 	),
641 	TP_printk("\t%s: xid=%u",
642 		__get_str(func_name), __entry->xid)
643 )
644 
645 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name)        \
646 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name,  \
647 	TP_PROTO(unsigned int xid,		\
648 		const char *func_name),		\
649 	TP_ARGS(xid, func_name))
650 
651 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
652 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
653 
654 /*
655  * For SMB2/SMB3 tree connect
656  */
657 
658 DECLARE_EVENT_CLASS(smb3_tcon_class,
659 	TP_PROTO(unsigned int xid,
660 		__u32	tid,
661 		__u64	sesid,
662 		const char *unc_name,
663 		int	rc),
664 	TP_ARGS(xid, tid, sesid, unc_name, rc),
665 	TP_STRUCT__entry(
666 		__field(unsigned int, xid)
667 		__field(__u32, tid)
668 		__field(__u64, sesid)
669 		__string(name, unc_name)
670 		__field(int, rc)
671 	),
672 	TP_fast_assign(
673 		__entry->xid = xid;
674 		__entry->tid = tid;
675 		__entry->sesid = sesid;
676 		__assign_str(name, unc_name);
677 		__entry->rc = rc;
678 	),
679 	TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d",
680 		__entry->xid, __entry->sesid, __entry->tid,
681 		__get_str(name), __entry->rc)
682 )
683 
684 #define DEFINE_SMB3_TCON_EVENT(name)          \
685 DEFINE_EVENT(smb3_tcon_class, smb3_##name,    \
686 	TP_PROTO(unsigned int xid,		\
687 		__u32	tid,			\
688 		__u64	sesid,			\
689 		const char *unc_name,		\
690 		int	rc),			\
691 	TP_ARGS(xid, tid, sesid, unc_name, rc))
692 
693 DEFINE_SMB3_TCON_EVENT(tcon);
694 
695 
696 /*
697  * For smb2/smb3 open (including create and mkdir) calls
698  */
699 
700 DECLARE_EVENT_CLASS(smb3_open_enter_class,
701 	TP_PROTO(unsigned int xid,
702 		__u32	tid,
703 		__u64	sesid,
704 		int	create_options,
705 		int	desired_access),
706 	TP_ARGS(xid, tid, sesid, create_options, desired_access),
707 	TP_STRUCT__entry(
708 		__field(unsigned int, xid)
709 		__field(__u32, tid)
710 		__field(__u64, sesid)
711 		__field(int, create_options)
712 		__field(int, desired_access)
713 	),
714 	TP_fast_assign(
715 		__entry->xid = xid;
716 		__entry->tid = tid;
717 		__entry->sesid = sesid;
718 		__entry->create_options = create_options;
719 		__entry->desired_access = desired_access;
720 	),
721 	TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x",
722 		__entry->xid, __entry->sesid, __entry->tid,
723 		__entry->create_options, __entry->desired_access)
724 )
725 
726 #define DEFINE_SMB3_OPEN_ENTER_EVENT(name)        \
727 DEFINE_EVENT(smb3_open_enter_class, smb3_##name,  \
728 	TP_PROTO(unsigned int xid,		\
729 		__u32	tid,			\
730 		__u64	sesid,			\
731 		int	create_options,		\
732 		int	desired_access),	\
733 	TP_ARGS(xid, tid, sesid, create_options, desired_access))
734 
735 DEFINE_SMB3_OPEN_ENTER_EVENT(open_enter);
736 DEFINE_SMB3_OPEN_ENTER_EVENT(posix_mkdir_enter);
737 
738 DECLARE_EVENT_CLASS(smb3_open_err_class,
739 	TP_PROTO(unsigned int xid,
740 		__u32	tid,
741 		__u64	sesid,
742 		int	create_options,
743 		int	desired_access,
744 		int	rc),
745 	TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
746 	TP_STRUCT__entry(
747 		__field(unsigned int, xid)
748 		__field(__u32, tid)
749 		__field(__u64, sesid)
750 		__field(int,   create_options)
751 		__field(int, desired_access)
752 		__field(int, rc)
753 	),
754 	TP_fast_assign(
755 		__entry->xid = xid;
756 		__entry->tid = tid;
757 		__entry->sesid = sesid;
758 		__entry->create_options = create_options;
759 		__entry->desired_access = desired_access;
760 		__entry->rc = rc;
761 	),
762 	TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
763 		__entry->xid, __entry->sesid, __entry->tid,
764 		__entry->create_options, __entry->desired_access, __entry->rc)
765 )
766 
767 #define DEFINE_SMB3_OPEN_ERR_EVENT(name)          \
768 DEFINE_EVENT(smb3_open_err_class, smb3_##name,    \
769 	TP_PROTO(unsigned int xid,		\
770 		__u32	tid,			\
771 		__u64	sesid,			\
772 		int	create_options,		\
773 		int	desired_access,		\
774 		int	rc),			\
775 	TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
776 
777 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
778 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
779 
780 DECLARE_EVENT_CLASS(smb3_open_done_class,
781 	TP_PROTO(unsigned int xid,
782 		__u64	fid,
783 		__u32	tid,
784 		__u64	sesid,
785 		int	create_options,
786 		int	desired_access),
787 	TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
788 	TP_STRUCT__entry(
789 		__field(unsigned int, xid)
790 		__field(__u64, fid)
791 		__field(__u32, tid)
792 		__field(__u64, sesid)
793 		__field(int, create_options)
794 		__field(int, desired_access)
795 	),
796 	TP_fast_assign(
797 		__entry->xid = xid;
798 		__entry->fid = fid;
799 		__entry->tid = tid;
800 		__entry->sesid = sesid;
801 		__entry->create_options = create_options;
802 		__entry->desired_access = desired_access;
803 	),
804 	TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x",
805 		__entry->xid, __entry->sesid, __entry->tid, __entry->fid,
806 		__entry->create_options, __entry->desired_access)
807 )
808 
809 #define DEFINE_SMB3_OPEN_DONE_EVENT(name)        \
810 DEFINE_EVENT(smb3_open_done_class, smb3_##name,  \
811 	TP_PROTO(unsigned int xid,		\
812 		__u64	fid,			\
813 		__u32	tid,			\
814 		__u64	sesid,			\
815 		int	create_options,		\
816 		int	desired_access),	\
817 	TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
818 
819 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
820 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
821 
822 
823 DECLARE_EVENT_CLASS(smb3_lease_done_class,
824 	TP_PROTO(__u32	lease_state,
825 		__u32	tid,
826 		__u64	sesid,
827 		__u64	lease_key_low,
828 		__u64	lease_key_high),
829 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
830 	TP_STRUCT__entry(
831 		__field(__u32, lease_state)
832 		__field(__u32, tid)
833 		__field(__u64, sesid)
834 		__field(__u64, lease_key_low)
835 		__field(__u64, lease_key_high)
836 	),
837 	TP_fast_assign(
838 		__entry->lease_state = lease_state;
839 		__entry->tid = tid;
840 		__entry->sesid = sesid;
841 		__entry->lease_key_low = lease_key_low;
842 		__entry->lease_key_high = lease_key_high;
843 	),
844 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
845 		__entry->sesid, __entry->tid, __entry->lease_key_high,
846 		__entry->lease_key_low, __entry->lease_state)
847 )
848 
849 #define DEFINE_SMB3_LEASE_DONE_EVENT(name)        \
850 DEFINE_EVENT(smb3_lease_done_class, smb3_##name,  \
851 	TP_PROTO(__u32	lease_state,		\
852 		__u32	tid,			\
853 		__u64	sesid,			\
854 		__u64	lease_key_low,		\
855 		__u64	lease_key_high),	\
856 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
857 
858 DEFINE_SMB3_LEASE_DONE_EVENT(lease_done);
859 DEFINE_SMB3_LEASE_DONE_EVENT(lease_not_found);
860 
861 DECLARE_EVENT_CLASS(smb3_lease_err_class,
862 	TP_PROTO(__u32	lease_state,
863 		__u32	tid,
864 		__u64	sesid,
865 		__u64	lease_key_low,
866 		__u64	lease_key_high,
867 		int	rc),
868 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
869 	TP_STRUCT__entry(
870 		__field(__u32, lease_state)
871 		__field(__u32, tid)
872 		__field(__u64, sesid)
873 		__field(__u64, lease_key_low)
874 		__field(__u64, lease_key_high)
875 		__field(int, rc)
876 	),
877 	TP_fast_assign(
878 		__entry->lease_state = lease_state;
879 		__entry->tid = tid;
880 		__entry->sesid = sesid;
881 		__entry->lease_key_low = lease_key_low;
882 		__entry->lease_key_high = lease_key_high;
883 		__entry->rc = rc;
884 	),
885 	TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
886 		__entry->sesid, __entry->tid, __entry->lease_key_high,
887 		__entry->lease_key_low, __entry->lease_state, __entry->rc)
888 )
889 
890 #define DEFINE_SMB3_LEASE_ERR_EVENT(name)        \
891 DEFINE_EVENT(smb3_lease_err_class, smb3_##name,  \
892 	TP_PROTO(__u32	lease_state,		\
893 		__u32	tid,			\
894 		__u64	sesid,			\
895 		__u64	lease_key_low,		\
896 		__u64	lease_key_high,		\
897 		int	rc),			\
898 	TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
899 
900 DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
901 
902 DECLARE_EVENT_CLASS(smb3_connect_class,
903 	TP_PROTO(char *hostname,
904 		__u64 conn_id,
905 		const struct __kernel_sockaddr_storage *dst_addr),
906 	TP_ARGS(hostname, conn_id, dst_addr),
907 	TP_STRUCT__entry(
908 		__string(hostname, hostname)
909 		__field(__u64, conn_id)
910 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
911 	),
912 	TP_fast_assign(
913 		struct sockaddr_storage *pss = NULL;
914 
915 		__entry->conn_id = conn_id;
916 		pss = (struct sockaddr_storage *)__entry->dst_addr;
917 		*pss = *dst_addr;
918 		__assign_str(hostname, hostname);
919 	),
920 	TP_printk("conn_id=0x%llx server=%s addr=%pISpsfc",
921 		__entry->conn_id,
922 		__get_str(hostname),
923 		__entry->dst_addr)
924 )
925 
926 #define DEFINE_SMB3_CONNECT_EVENT(name)        \
927 DEFINE_EVENT(smb3_connect_class, smb3_##name,  \
928 	TP_PROTO(char *hostname,		\
929 		__u64 conn_id,			\
930 		const struct __kernel_sockaddr_storage *addr),	\
931 	TP_ARGS(hostname, conn_id, addr))
932 
933 DEFINE_SMB3_CONNECT_EVENT(connect_done);
934 
935 DECLARE_EVENT_CLASS(smb3_connect_err_class,
936 	TP_PROTO(char *hostname, __u64 conn_id,
937 		const struct __kernel_sockaddr_storage *dst_addr, int rc),
938 	TP_ARGS(hostname, conn_id, dst_addr, rc),
939 	TP_STRUCT__entry(
940 		__string(hostname, hostname)
941 		__field(__u64, conn_id)
942 		__array(__u8, dst_addr, sizeof(struct sockaddr_storage))
943 		__field(int, rc)
944 	),
945 	TP_fast_assign(
946 		struct sockaddr_storage *pss = NULL;
947 
948 		__entry->conn_id = conn_id;
949 		__entry->rc = rc;
950 		pss = (struct sockaddr_storage *)__entry->dst_addr;
951 		*pss = *dst_addr;
952 		__assign_str(hostname, hostname);
953 	),
954 	TP_printk("rc=%d conn_id=0x%llx server=%s addr=%pISpsfc",
955 		__entry->rc,
956 		__entry->conn_id,
957 		__get_str(hostname),
958 		__entry->dst_addr)
959 )
960 
961 #define DEFINE_SMB3_CONNECT_ERR_EVENT(name)        \
962 DEFINE_EVENT(smb3_connect_err_class, smb3_##name,  \
963 	TP_PROTO(char *hostname,		\
964 		__u64 conn_id,			\
965 		const struct __kernel_sockaddr_storage *addr,	\
966 		int rc),			\
967 	TP_ARGS(hostname, conn_id, addr, rc))
968 
969 DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
970 
971 DECLARE_EVENT_CLASS(smb3_reconnect_class,
972 	TP_PROTO(__u64	currmid,
973 		__u64 conn_id,
974 		char *hostname),
975 	TP_ARGS(currmid, conn_id, hostname),
976 	TP_STRUCT__entry(
977 		__field(__u64, currmid)
978 		__field(__u64, conn_id)
979 		__string(hostname, hostname)
980 	),
981 	TP_fast_assign(
982 		__entry->currmid = currmid;
983 		__entry->conn_id = conn_id;
984 		__assign_str(hostname, hostname);
985 	),
986 	TP_printk("conn_id=0x%llx server=%s current_mid=%llu",
987 		__entry->conn_id,
988 		__get_str(hostname),
989 		__entry->currmid)
990 )
991 
992 #define DEFINE_SMB3_RECONNECT_EVENT(name)        \
993 DEFINE_EVENT(smb3_reconnect_class, smb3_##name,  \
994 	TP_PROTO(__u64	currmid,		\
995 		__u64 conn_id,			\
996 		char *hostname),				\
997 	TP_ARGS(currmid, conn_id, hostname))
998 
999 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
1000 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
1001 
1002 DECLARE_EVENT_CLASS(smb3_credit_class,
1003 	TP_PROTO(__u64	currmid,
1004 		__u64 conn_id,
1005 		char *hostname,
1006 		int credits,
1007 		int credits_to_add,
1008 		int in_flight),
1009 	TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight),
1010 	TP_STRUCT__entry(
1011 		__field(__u64, currmid)
1012 		__field(__u64, conn_id)
1013 		__string(hostname, hostname)
1014 		__field(int, credits)
1015 		__field(int, credits_to_add)
1016 		__field(int, in_flight)
1017 	),
1018 	TP_fast_assign(
1019 		__entry->currmid = currmid;
1020 		__entry->conn_id = conn_id;
1021 		__assign_str(hostname, hostname);
1022 		__entry->credits = credits;
1023 		__entry->credits_to_add = credits_to_add;
1024 		__entry->in_flight = in_flight;
1025 	),
1026 	TP_printk("conn_id=0x%llx server=%s current_mid=%llu "
1027 			"credits=%d credit_change=%d in_flight=%d",
1028 		__entry->conn_id,
1029 		__get_str(hostname),
1030 		__entry->currmid,
1031 		__entry->credits,
1032 		__entry->credits_to_add,
1033 		__entry->in_flight)
1034 )
1035 
1036 #define DEFINE_SMB3_CREDIT_EVENT(name)        \
1037 DEFINE_EVENT(smb3_credit_class, smb3_##name,  \
1038 	TP_PROTO(__u64	currmid,		\
1039 		__u64 conn_id,			\
1040 		char *hostname,			\
1041 		int  credits,			\
1042 		int  credits_to_add,	\
1043 		int in_flight),			\
1044 	TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight))
1045 
1046 DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
1047 DEFINE_SMB3_CREDIT_EVENT(reconnect_detected);
1048 DEFINE_SMB3_CREDIT_EVENT(credit_timeout);
1049 DEFINE_SMB3_CREDIT_EVENT(insufficient_credits);
1050 DEFINE_SMB3_CREDIT_EVENT(too_many_credits);
1051 DEFINE_SMB3_CREDIT_EVENT(add_credits);
1052 DEFINE_SMB3_CREDIT_EVENT(adj_credits);
1053 DEFINE_SMB3_CREDIT_EVENT(hdr_credits);
1054 DEFINE_SMB3_CREDIT_EVENT(nblk_credits);
1055 DEFINE_SMB3_CREDIT_EVENT(pend_credits);
1056 DEFINE_SMB3_CREDIT_EVENT(wait_credits);
1057 DEFINE_SMB3_CREDIT_EVENT(waitff_credits);
1058 DEFINE_SMB3_CREDIT_EVENT(overflow_credits);
1059 DEFINE_SMB3_CREDIT_EVENT(set_credits);
1060 
1061 #endif /* _CIFS_TRACE_H */
1062 
1063 #undef TRACE_INCLUDE_PATH
1064 #define TRACE_INCLUDE_PATH .
1065 #define TRACE_INCLUDE_FILE trace
1066 #include <trace/define_trace.h>
1067