1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2018, Microsoft Corporation.
7 * Please use this 3-part article as a reference for writing new tracepoints:
8 * https://lwn.net/Articles/379903/
11 #define TRACE_SYSTEM cifs
13 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
16 #include <linux/tracepoint.h>
17 #include <linux/net.h>
18 #include <linux/inet.h>
21 * Specify enums for tracing information.
23 #define smb3_rw_credits_traces \
24 EM(cifs_trace_rw_credits_call_readv_adjust, "rd-call-adj") \
25 EM(cifs_trace_rw_credits_call_writev_adjust, "wr-call-adj") \
26 EM(cifs_trace_rw_credits_free_subreq, "free-subreq") \
27 EM(cifs_trace_rw_credits_issue_read_adjust, "rd-issu-adj") \
28 EM(cifs_trace_rw_credits_issue_write_adjust, "wr-issu-adj") \
29 EM(cifs_trace_rw_credits_no_adjust_up, "no-adj-up ") \
30 EM(cifs_trace_rw_credits_old_session, "old-session") \
31 EM(cifs_trace_rw_credits_read_response_add, "rd-resp-add") \
32 EM(cifs_trace_rw_credits_read_response_clear, "rd-resp-clr") \
33 EM(cifs_trace_rw_credits_read_submit, "rd-submit ") \
34 EM(cifs_trace_rw_credits_write_prepare, "wr-prepare ") \
35 EM(cifs_trace_rw_credits_write_response_add, "wr-resp-add") \
36 EM(cifs_trace_rw_credits_write_response_clear, "wr-resp-clr") \
37 E_(cifs_trace_rw_credits_zero_in_flight, "ZERO-IN-FLT")
39 #define smb3_tcon_ref_traces \
40 EM(netfs_trace_tcon_ref_dec_dfs_refer, "DEC DfsRef") \
41 EM(netfs_trace_tcon_ref_free, "FRE ") \
42 EM(netfs_trace_tcon_ref_free_fail, "FRE Fail ") \
43 EM(netfs_trace_tcon_ref_free_ipc, "FRE Ipc ") \
44 EM(netfs_trace_tcon_ref_free_ipc_fail, "FRE Ipc-F ") \
45 EM(netfs_trace_tcon_ref_free_reconnect_server, "FRE Reconn") \
46 EM(netfs_trace_tcon_ref_get_cancelled_close, "GET Cn-Cls") \
47 EM(netfs_trace_tcon_ref_get_dfs_refer, "GET DfsRef") \
48 EM(netfs_trace_tcon_ref_get_find, "GET Find ") \
49 EM(netfs_trace_tcon_ref_get_find_sess_tcon, "GET FndSes") \
50 EM(netfs_trace_tcon_ref_get_reconnect_server, "GET Reconn") \
51 EM(netfs_trace_tcon_ref_new, "NEW ") \
52 EM(netfs_trace_tcon_ref_new_ipc, "NEW Ipc ") \
53 EM(netfs_trace_tcon_ref_new_reconnect_server, "NEW Reconn") \
54 EM(netfs_trace_tcon_ref_put_cancelled_close, "PUT Cn-Cls") \
55 EM(netfs_trace_tcon_ref_put_cancelled_close_fid, "PUT Cn-Fid") \
56 EM(netfs_trace_tcon_ref_put_cancelled_mid, "PUT Cn-Mid") \
57 EM(netfs_trace_tcon_ref_put_mnt_ctx, "PUT MntCtx") \
58 EM(netfs_trace_tcon_ref_put_reconnect_server, "PUT Reconn") \
59 EM(netfs_trace_tcon_ref_put_tlink, "PUT Tlink ") \
60 EM(netfs_trace_tcon_ref_see_cancelled_close, "SEE Cn-Cls") \
61 EM(netfs_trace_tcon_ref_see_fscache_collision, "SEE FV-CO!") \
62 EM(netfs_trace_tcon_ref_see_fscache_okay, "SEE FV-Ok ") \
63 EM(netfs_trace_tcon_ref_see_fscache_relinq, "SEE FV-Rlq") \
64 E_(netfs_trace_tcon_ref_see_umount, "SEE Umount")
70 * Define those tracing enums.
72 #ifndef __SMB3_DECLARE_TRACE_ENUMS_ONCE_ONLY
73 #define __SMB3_DECLARE_TRACE_ENUMS_ONCE_ONLY
78 enum smb3_rw_credits_trace { smb3_rw_credits_traces } __mode(byte);
79 enum smb3_tcon_ref_trace { smb3_tcon_ref_traces } __mode(byte);
86 * Export enum symbols via userspace.
88 #define EM(a, b) TRACE_DEFINE_ENUM(a);
89 #define E_(a, b) TRACE_DEFINE_ENUM(a);
91 smb3_rw_credits_traces;
98 * Now redefine the EM() and E_() macros to map the enums to the strings that
99 * will be printed in the output.
101 #define EM(a, b) { a, b },
102 #define E_(a, b) { a, b }
104 /* For logging errors in read or write */
105 DECLARE_EVENT_CLASS(smb3_rw_err_class,
106 TP_PROTO(unsigned int rreq_debug_id,
107 unsigned int rreq_debug_index,
115 TP_ARGS(rreq_debug_id, rreq_debug_index,
116 xid, fid, tid, sesid, offset, len, rc),
118 __field(unsigned int, rreq_debug_id)
119 __field(unsigned int, rreq_debug_index)
120 __field(unsigned int, xid)
123 __field(__u64, sesid)
124 __field(__u64, offset)
129 __entry->rreq_debug_id = rreq_debug_id;
130 __entry->rreq_debug_index = rreq_debug_index;
134 __entry->sesid = sesid;
135 __entry->offset = offset;
139 TP_printk("\tR=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
140 __entry->rreq_debug_id, __entry->rreq_debug_index,
141 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
142 __entry->offset, __entry->len, __entry->rc)
145 #define DEFINE_SMB3_RW_ERR_EVENT(name) \
146 DEFINE_EVENT(smb3_rw_err_class, smb3_##name, \
147 TP_PROTO(unsigned int rreq_debug_id, \
148 unsigned int rreq_debug_index, \
156 TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, len, rc))
158 DEFINE_SMB3_RW_ERR_EVENT(read_err);
160 /* For logging errors in other file I/O ops */
161 DECLARE_EVENT_CLASS(smb3_other_err_class,
162 TP_PROTO(unsigned int xid,
169 TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
171 __field(unsigned int, xid)
174 __field(__u64, sesid)
175 __field(__u64, offset)
183 __entry->sesid = sesid;
184 __entry->offset = offset;
188 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
189 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
190 __entry->offset, __entry->len, __entry->rc)
193 #define DEFINE_SMB3_OTHER_ERR_EVENT(name) \
194 DEFINE_EVENT(smb3_other_err_class, smb3_##name, \
195 TP_PROTO(unsigned int xid, \
202 TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
204 DEFINE_SMB3_OTHER_ERR_EVENT(write_err);
205 DEFINE_SMB3_OTHER_ERR_EVENT(query_dir_err);
206 DEFINE_SMB3_OTHER_ERR_EVENT(zero_err);
207 DEFINE_SMB3_OTHER_ERR_EVENT(falloc_err);
210 /* For logging successful read or write */
211 DECLARE_EVENT_CLASS(smb3_rw_done_class,
212 TP_PROTO(unsigned int rreq_debug_id,
213 unsigned int rreq_debug_index,
220 TP_ARGS(rreq_debug_id, rreq_debug_index,
221 xid, fid, tid, sesid, offset, len),
223 __field(unsigned int, rreq_debug_id)
224 __field(unsigned int, rreq_debug_index)
225 __field(unsigned int, xid)
228 __field(__u64, sesid)
229 __field(__u64, offset)
233 __entry->rreq_debug_id = rreq_debug_id;
234 __entry->rreq_debug_index = rreq_debug_index;
238 __entry->sesid = sesid;
239 __entry->offset = offset;
242 TP_printk("R=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
243 __entry->rreq_debug_id, __entry->rreq_debug_index,
244 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
245 __entry->offset, __entry->len)
248 #define DEFINE_SMB3_RW_DONE_EVENT(name) \
249 DEFINE_EVENT(smb3_rw_done_class, smb3_##name, \
250 TP_PROTO(unsigned int rreq_debug_id, \
251 unsigned int rreq_debug_index, \
258 TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, len))
260 DEFINE_SMB3_RW_DONE_EVENT(read_enter);
261 DEFINE_SMB3_RW_DONE_EVENT(read_done);
263 /* For logging successful other op */
264 DECLARE_EVENT_CLASS(smb3_other_done_class,
265 TP_PROTO(unsigned int xid,
271 TP_ARGS(xid, fid, tid, sesid, offset, len),
273 __field(unsigned int, xid)
276 __field(__u64, sesid)
277 __field(__u64, offset)
284 __entry->sesid = sesid;
285 __entry->offset = offset;
288 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
289 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
290 __entry->offset, __entry->len)
293 #define DEFINE_SMB3_OTHER_DONE_EVENT(name) \
294 DEFINE_EVENT(smb3_other_done_class, smb3_##name, \
295 TP_PROTO(unsigned int xid, \
301 TP_ARGS(xid, fid, tid, sesid, offset, len))
303 DEFINE_SMB3_OTHER_DONE_EVENT(write_enter);
304 DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_enter);
305 DEFINE_SMB3_OTHER_DONE_EVENT(zero_enter);
306 DEFINE_SMB3_OTHER_DONE_EVENT(falloc_enter);
307 DEFINE_SMB3_OTHER_DONE_EVENT(write_done);
308 DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_done);
309 DEFINE_SMB3_OTHER_DONE_EVENT(zero_done);
310 DEFINE_SMB3_OTHER_DONE_EVENT(falloc_done);
312 /* For logging successful set EOF (truncate) */
313 DECLARE_EVENT_CLASS(smb3_eof_class,
314 TP_PROTO(unsigned int xid,
319 TP_ARGS(xid, fid, tid, sesid, offset),
321 __field(unsigned int, xid)
324 __field(__u64, sesid)
325 __field(__u64, offset)
331 __entry->sesid = sesid;
332 __entry->offset = offset;
334 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx",
335 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
339 #define DEFINE_SMB3_EOF_EVENT(name) \
340 DEFINE_EVENT(smb3_eof_class, smb3_##name, \
341 TP_PROTO(unsigned int xid, \
346 TP_ARGS(xid, fid, tid, sesid, offset))
348 DEFINE_SMB3_EOF_EVENT(set_eof);
351 * For handle based calls other than read and write, and get/set info
353 DECLARE_EVENT_CLASS(smb3_fd_class,
354 TP_PROTO(unsigned int xid,
358 TP_ARGS(xid, fid, tid, sesid),
360 __field(unsigned int, xid)
363 __field(__u64, sesid)
369 __entry->sesid = sesid;
371 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx",
372 __entry->xid, __entry->sesid, __entry->tid, __entry->fid)
375 #define DEFINE_SMB3_FD_EVENT(name) \
376 DEFINE_EVENT(smb3_fd_class, smb3_##name, \
377 TP_PROTO(unsigned int xid, \
381 TP_ARGS(xid, fid, tid, sesid))
383 DEFINE_SMB3_FD_EVENT(flush_enter);
384 DEFINE_SMB3_FD_EVENT(flush_done);
385 DEFINE_SMB3_FD_EVENT(close_enter);
386 DEFINE_SMB3_FD_EVENT(close_done);
387 DEFINE_SMB3_FD_EVENT(oplock_not_found);
389 DECLARE_EVENT_CLASS(smb3_fd_err_class,
390 TP_PROTO(unsigned int xid,
395 TP_ARGS(xid, fid, tid, sesid, rc),
397 __field(unsigned int, xid)
400 __field(__u64, sesid)
407 __entry->sesid = sesid;
410 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
411 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
415 #define DEFINE_SMB3_FD_ERR_EVENT(name) \
416 DEFINE_EVENT(smb3_fd_err_class, smb3_##name, \
417 TP_PROTO(unsigned int xid, \
422 TP_ARGS(xid, fid, tid, sesid, rc))
424 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
425 DEFINE_SMB3_FD_ERR_EVENT(lock_err);
426 DEFINE_SMB3_FD_ERR_EVENT(close_err);
429 * For handle based query/set info calls
431 DECLARE_EVENT_CLASS(smb3_inf_enter_class,
432 TP_PROTO(unsigned int xid,
438 TP_ARGS(xid, fid, tid, sesid, infclass, type),
440 __field(unsigned int, xid)
443 __field(__u64, sesid)
444 __field(__u8, infclass)
451 __entry->sesid = sesid;
452 __entry->infclass = infclass;
453 __entry->type = type;
455 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x",
456 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
457 __entry->infclass, __entry->type)
460 #define DEFINE_SMB3_INF_ENTER_EVENT(name) \
461 DEFINE_EVENT(smb3_inf_enter_class, smb3_##name, \
462 TP_PROTO(unsigned int xid, \
468 TP_ARGS(xid, fid, tid, sesid, infclass, type))
470 DEFINE_SMB3_INF_ENTER_EVENT(query_info_enter);
471 DEFINE_SMB3_INF_ENTER_EVENT(query_info_done);
472 DEFINE_SMB3_INF_ENTER_EVENT(notify_enter);
473 DEFINE_SMB3_INF_ENTER_EVENT(notify_done);
475 DECLARE_EVENT_CLASS(smb3_inf_err_class,
476 TP_PROTO(unsigned int xid,
483 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
485 __field(unsigned int, xid)
488 __field(__u64, sesid)
489 __field(__u8, infclass)
497 __entry->sesid = sesid;
498 __entry->infclass = infclass;
499 __entry->type = type;
502 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
503 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
504 __entry->infclass, __entry->type, __entry->rc)
507 #define DEFINE_SMB3_INF_ERR_EVENT(name) \
508 DEFINE_EVENT(smb3_inf_err_class, smb3_##name, \
509 TP_PROTO(unsigned int xid, \
516 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
518 DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
519 DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
520 DEFINE_SMB3_INF_ERR_EVENT(notify_err);
521 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
523 DECLARE_EVENT_CLASS(smb3_inf_compound_enter_class,
524 TP_PROTO(unsigned int xid,
527 const char *full_path),
528 TP_ARGS(xid, tid, sesid, full_path),
530 __field(unsigned int, xid)
532 __field(__u64, sesid)
533 __string(path, full_path)
538 __entry->sesid = sesid;
541 TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s",
542 __entry->xid, __entry->sesid, __entry->tid,
546 #define DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(name) \
547 DEFINE_EVENT(smb3_inf_compound_enter_class, smb3_##name, \
548 TP_PROTO(unsigned int xid, \
551 const char *full_path), \
552 TP_ARGS(xid, tid, sesid, full_path))
554 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(query_info_compound_enter);
555 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(posix_query_info_compound_enter);
556 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(hardlink_enter);
557 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rename_enter);
558 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(rmdir_enter);
559 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_eof_enter);
560 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_info_compound_enter);
561 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(set_reparse_compound_enter);
562 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(get_reparse_compound_enter);
563 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(delete_enter);
564 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mkdir_enter);
565 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(tdis_enter);
566 DEFINE_SMB3_INF_COMPOUND_ENTER_EVENT(mknod_enter);
568 DECLARE_EVENT_CLASS(smb3_inf_compound_done_class,
569 TP_PROTO(unsigned int xid,
572 TP_ARGS(xid, tid, sesid),
574 __field(unsigned int, xid)
576 __field(__u64, sesid)
581 __entry->sesid = sesid;
583 TP_printk("xid=%u sid=0x%llx tid=0x%x",
584 __entry->xid, __entry->sesid, __entry->tid)
587 #define DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(name) \
588 DEFINE_EVENT(smb3_inf_compound_done_class, smb3_##name, \
589 TP_PROTO(unsigned int xid, \
592 TP_ARGS(xid, tid, sesid))
594 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_info_compound_done);
595 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(posix_query_info_compound_done);
596 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(hardlink_done);
597 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rename_done);
598 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(rmdir_done);
599 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_eof_done);
600 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_info_compound_done);
601 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(set_reparse_compound_done);
602 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(get_reparse_compound_done);
603 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(query_wsl_ea_compound_done);
604 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(delete_done);
605 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mkdir_done);
606 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(tdis_done);
607 DEFINE_SMB3_INF_COMPOUND_DONE_EVENT(mknod_done);
609 DECLARE_EVENT_CLASS(smb3_inf_compound_err_class,
610 TP_PROTO(unsigned int xid,
614 TP_ARGS(xid, tid, sesid, rc),
616 __field(unsigned int, xid)
618 __field(__u64, sesid)
624 __entry->sesid = sesid;
627 TP_printk("xid=%u sid=0x%llx tid=0x%x rc=%d",
628 __entry->xid, __entry->sesid, __entry->tid,
632 #define DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(name) \
633 DEFINE_EVENT(smb3_inf_compound_err_class, smb3_##name, \
634 TP_PROTO(unsigned int xid, \
638 TP_ARGS(xid, tid, sesid, rc))
640 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_info_compound_err);
641 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(posix_query_info_compound_err);
642 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(hardlink_err);
643 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rename_err);
644 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(rmdir_err);
645 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_eof_err);
646 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_info_compound_err);
647 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(set_reparse_compound_err);
648 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(get_reparse_compound_err);
649 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(query_wsl_ea_compound_err);
650 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mkdir_err);
651 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(delete_err);
652 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(tdis_err);
653 DEFINE_SMB3_INF_COMPOUND_ERR_EVENT(mknod_err);
656 * For logging SMB3 Status code and Command for responses which return errors
658 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
665 TP_ARGS(tid, sesid, cmd, mid, status, rc),
668 __field(__u64, sesid)
671 __field(__u32, status)
676 __entry->sesid = sesid;
679 __entry->status = status;
682 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
683 __entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
684 __entry->status, __entry->rc)
687 #define DEFINE_SMB3_CMD_ERR_EVENT(name) \
688 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name, \
689 TP_PROTO(__u32 tid, \
695 TP_ARGS(tid, sesid, cmd, mid, status, rc))
697 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
699 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
704 TP_ARGS(tid, sesid, cmd, mid),
707 __field(__u64, sesid)
713 __entry->sesid = sesid;
717 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu",
718 __entry->sesid, __entry->tid,
719 __entry->cmd, __entry->mid)
722 #define DEFINE_SMB3_CMD_DONE_EVENT(name) \
723 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name, \
724 TP_PROTO(__u32 tid, \
728 TP_ARGS(tid, sesid, cmd, mid))
730 DEFINE_SMB3_CMD_DONE_EVENT(cmd_enter);
731 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
732 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
734 DECLARE_EVENT_CLASS(smb3_mid_class,
738 unsigned long when_sent,
739 unsigned long when_received),
740 TP_ARGS(cmd, mid, pid, when_sent, when_received),
745 __field(unsigned long, when_sent)
746 __field(unsigned long, when_received)
752 __entry->when_sent = when_sent;
753 __entry->when_received = when_received;
755 TP_printk("\tcmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
756 __entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
757 __entry->when_received)
760 #define DEFINE_SMB3_MID_EVENT(name) \
761 DEFINE_EVENT(smb3_mid_class, smb3_##name, \
762 TP_PROTO(__u16 cmd, \
765 unsigned long when_sent, \
766 unsigned long when_received), \
767 TP_ARGS(cmd, mid, pid, when_sent, when_received))
769 DEFINE_SMB3_MID_EVENT(slow_rsp);
771 DECLARE_EVENT_CLASS(smb3_exit_err_class,
772 TP_PROTO(unsigned int xid,
773 const char *func_name,
775 TP_ARGS(xid, func_name, rc),
777 __field(unsigned int, xid)
778 __string(func_name, func_name)
783 __assign_str(func_name);
786 TP_printk("\t%s: xid=%u rc=%d",
787 __get_str(func_name), __entry->xid, __entry->rc)
790 #define DEFINE_SMB3_EXIT_ERR_EVENT(name) \
791 DEFINE_EVENT(smb3_exit_err_class, smb3_##name, \
792 TP_PROTO(unsigned int xid, \
793 const char *func_name, \
795 TP_ARGS(xid, func_name, rc))
797 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
800 DECLARE_EVENT_CLASS(smb3_sync_err_class,
801 TP_PROTO(unsigned long ino,
805 __field(unsigned long, ino)
812 TP_printk("\tino=%lu rc=%d",
813 __entry->ino, __entry->rc)
816 #define DEFINE_SMB3_SYNC_ERR_EVENT(name) \
817 DEFINE_EVENT(smb3_sync_err_class, cifs_##name, \
818 TP_PROTO(unsigned long ino, \
822 DEFINE_SMB3_SYNC_ERR_EVENT(fsync_err);
823 DEFINE_SMB3_SYNC_ERR_EVENT(flush_err);
826 DECLARE_EVENT_CLASS(smb3_enter_exit_class,
827 TP_PROTO(unsigned int xid,
828 const char *func_name),
829 TP_ARGS(xid, func_name),
831 __field(unsigned int, xid)
832 __string(func_name, func_name)
836 __assign_str(func_name);
838 TP_printk("\t%s: xid=%u",
839 __get_str(func_name), __entry->xid)
842 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name) \
843 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name, \
844 TP_PROTO(unsigned int xid, \
845 const char *func_name), \
846 TP_ARGS(xid, func_name))
848 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
849 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
852 * For SMB2/SMB3 tree connect
855 DECLARE_EVENT_CLASS(smb3_tcon_class,
856 TP_PROTO(unsigned int xid,
859 const char *unc_name,
861 TP_ARGS(xid, tid, sesid, unc_name, rc),
863 __field(unsigned int, xid)
865 __field(__u64, sesid)
866 __string(name, unc_name)
872 __entry->sesid = sesid;
876 TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d",
877 __entry->xid, __entry->sesid, __entry->tid,
878 __get_str(name), __entry->rc)
881 #define DEFINE_SMB3_TCON_EVENT(name) \
882 DEFINE_EVENT(smb3_tcon_class, smb3_##name, \
883 TP_PROTO(unsigned int xid, \
886 const char *unc_name, \
888 TP_ARGS(xid, tid, sesid, unc_name, rc))
890 DEFINE_SMB3_TCON_EVENT(tcon);
891 DEFINE_SMB3_TCON_EVENT(qfs_done);
894 * For smb2/smb3 open (including create and mkdir) calls
897 DECLARE_EVENT_CLASS(smb3_open_enter_class,
898 TP_PROTO(unsigned int xid,
901 const char *full_path,
904 TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access),
906 __field(unsigned int, xid)
908 __field(__u64, sesid)
909 __string(path, full_path)
910 __field(int, create_options)
911 __field(int, desired_access)
916 __entry->sesid = sesid;
918 __entry->create_options = create_options;
919 __entry->desired_access = desired_access;
921 TP_printk("xid=%u sid=0x%llx tid=0x%x path=%s cr_opts=0x%x des_access=0x%x",
922 __entry->xid, __entry->sesid, __entry->tid, __get_str(path),
923 __entry->create_options, __entry->desired_access)
926 #define DEFINE_SMB3_OPEN_ENTER_EVENT(name) \
927 DEFINE_EVENT(smb3_open_enter_class, smb3_##name, \
928 TP_PROTO(unsigned int xid, \
931 const char *full_path, \
932 int create_options, \
933 int desired_access), \
934 TP_ARGS(xid, tid, sesid, full_path, create_options, desired_access))
936 DEFINE_SMB3_OPEN_ENTER_EVENT(open_enter);
937 DEFINE_SMB3_OPEN_ENTER_EVENT(posix_mkdir_enter);
939 DECLARE_EVENT_CLASS(smb3_open_err_class,
940 TP_PROTO(unsigned int xid,
946 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
948 __field(unsigned int, xid)
950 __field(__u64, sesid)
951 __field(int, create_options)
952 __field(int, desired_access)
958 __entry->sesid = sesid;
959 __entry->create_options = create_options;
960 __entry->desired_access = desired_access;
963 TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
964 __entry->xid, __entry->sesid, __entry->tid,
965 __entry->create_options, __entry->desired_access, __entry->rc)
968 #define DEFINE_SMB3_OPEN_ERR_EVENT(name) \
969 DEFINE_EVENT(smb3_open_err_class, smb3_##name, \
970 TP_PROTO(unsigned int xid, \
973 int create_options, \
974 int desired_access, \
976 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
978 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
979 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
981 DECLARE_EVENT_CLASS(smb3_open_done_class,
982 TP_PROTO(unsigned int xid,
988 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
990 __field(unsigned int, xid)
993 __field(__u64, sesid)
994 __field(int, create_options)
995 __field(int, desired_access)
1001 __entry->sesid = sesid;
1002 __entry->create_options = create_options;
1003 __entry->desired_access = desired_access;
1005 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x",
1006 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
1007 __entry->create_options, __entry->desired_access)
1010 #define DEFINE_SMB3_OPEN_DONE_EVENT(name) \
1011 DEFINE_EVENT(smb3_open_done_class, smb3_##name, \
1012 TP_PROTO(unsigned int xid, \
1016 int create_options, \
1017 int desired_access), \
1018 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
1020 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
1021 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
1024 DECLARE_EVENT_CLASS(smb3_lease_done_class,
1025 TP_PROTO(__u32 lease_state,
1028 __u64 lease_key_low,
1029 __u64 lease_key_high),
1030 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
1032 __field(__u32, lease_state)
1034 __field(__u64, sesid)
1035 __field(__u64, lease_key_low)
1036 __field(__u64, lease_key_high)
1039 __entry->lease_state = lease_state;
1041 __entry->sesid = sesid;
1042 __entry->lease_key_low = lease_key_low;
1043 __entry->lease_key_high = lease_key_high;
1045 TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
1046 __entry->sesid, __entry->tid, __entry->lease_key_high,
1047 __entry->lease_key_low, __entry->lease_state)
1050 #define DEFINE_SMB3_LEASE_DONE_EVENT(name) \
1051 DEFINE_EVENT(smb3_lease_done_class, smb3_##name, \
1052 TP_PROTO(__u32 lease_state, \
1055 __u64 lease_key_low, \
1056 __u64 lease_key_high), \
1057 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
1059 DEFINE_SMB3_LEASE_DONE_EVENT(lease_done);
1060 DEFINE_SMB3_LEASE_DONE_EVENT(lease_not_found);
1062 DECLARE_EVENT_CLASS(smb3_lease_err_class,
1063 TP_PROTO(__u32 lease_state,
1066 __u64 lease_key_low,
1067 __u64 lease_key_high,
1069 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
1071 __field(__u32, lease_state)
1073 __field(__u64, sesid)
1074 __field(__u64, lease_key_low)
1075 __field(__u64, lease_key_high)
1079 __entry->lease_state = lease_state;
1081 __entry->sesid = sesid;
1082 __entry->lease_key_low = lease_key_low;
1083 __entry->lease_key_high = lease_key_high;
1086 TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
1087 __entry->sesid, __entry->tid, __entry->lease_key_high,
1088 __entry->lease_key_low, __entry->lease_state, __entry->rc)
1091 #define DEFINE_SMB3_LEASE_ERR_EVENT(name) \
1092 DEFINE_EVENT(smb3_lease_err_class, smb3_##name, \
1093 TP_PROTO(__u32 lease_state, \
1096 __u64 lease_key_low, \
1097 __u64 lease_key_high, \
1099 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
1101 DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
1103 DECLARE_EVENT_CLASS(smb3_connect_class,
1104 TP_PROTO(char *hostname,
1106 const struct __kernel_sockaddr_storage *dst_addr),
1107 TP_ARGS(hostname, conn_id, dst_addr),
1109 __string(hostname, hostname)
1110 __field(__u64, conn_id)
1111 __array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1114 struct sockaddr_storage *pss = NULL;
1116 __entry->conn_id = conn_id;
1117 pss = (struct sockaddr_storage *)__entry->dst_addr;
1119 __assign_str(hostname);
1121 TP_printk("conn_id=0x%llx server=%s addr=%pISpsfc",
1123 __get_str(hostname),
1127 #define DEFINE_SMB3_CONNECT_EVENT(name) \
1128 DEFINE_EVENT(smb3_connect_class, smb3_##name, \
1129 TP_PROTO(char *hostname, \
1131 const struct __kernel_sockaddr_storage *addr), \
1132 TP_ARGS(hostname, conn_id, addr))
1134 DEFINE_SMB3_CONNECT_EVENT(connect_done);
1135 DEFINE_SMB3_CONNECT_EVENT(smbd_connect_done);
1136 DEFINE_SMB3_CONNECT_EVENT(smbd_connect_err);
1138 DECLARE_EVENT_CLASS(smb3_connect_err_class,
1139 TP_PROTO(char *hostname, __u64 conn_id,
1140 const struct __kernel_sockaddr_storage *dst_addr, int rc),
1141 TP_ARGS(hostname, conn_id, dst_addr, rc),
1143 __string(hostname, hostname)
1144 __field(__u64, conn_id)
1145 __array(__u8, dst_addr, sizeof(struct sockaddr_storage))
1149 struct sockaddr_storage *pss = NULL;
1151 __entry->conn_id = conn_id;
1153 pss = (struct sockaddr_storage *)__entry->dst_addr;
1155 __assign_str(hostname);
1157 TP_printk("rc=%d conn_id=0x%llx server=%s addr=%pISpsfc",
1160 __get_str(hostname),
1164 #define DEFINE_SMB3_CONNECT_ERR_EVENT(name) \
1165 DEFINE_EVENT(smb3_connect_err_class, smb3_##name, \
1166 TP_PROTO(char *hostname, \
1168 const struct __kernel_sockaddr_storage *addr, \
1170 TP_ARGS(hostname, conn_id, addr, rc))
1172 DEFINE_SMB3_CONNECT_ERR_EVENT(connect_err);
1174 DECLARE_EVENT_CLASS(smb3_reconnect_class,
1175 TP_PROTO(__u64 currmid,
1178 TP_ARGS(currmid, conn_id, hostname),
1180 __field(__u64, currmid)
1181 __field(__u64, conn_id)
1182 __string(hostname, hostname)
1185 __entry->currmid = currmid;
1186 __entry->conn_id = conn_id;
1187 __assign_str(hostname);
1189 TP_printk("conn_id=0x%llx server=%s current_mid=%llu",
1191 __get_str(hostname),
1195 #define DEFINE_SMB3_RECONNECT_EVENT(name) \
1196 DEFINE_EVENT(smb3_reconnect_class, smb3_##name, \
1197 TP_PROTO(__u64 currmid, \
1200 TP_ARGS(currmid, conn_id, hostname))
1202 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
1203 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
1205 DECLARE_EVENT_CLASS(smb3_ses_class,
1206 TP_PROTO(__u64 sesid),
1209 __field(__u64, sesid)
1212 __entry->sesid = sesid;
1214 TP_printk("sid=0x%llx",
1218 #define DEFINE_SMB3_SES_EVENT(name) \
1219 DEFINE_EVENT(smb3_ses_class, smb3_##name, \
1220 TP_PROTO(__u64 sesid), \
1223 DEFINE_SMB3_SES_EVENT(ses_not_found);
1225 DECLARE_EVENT_CLASS(smb3_ioctl_class,
1226 TP_PROTO(unsigned int xid,
1228 unsigned int command),
1229 TP_ARGS(xid, fid, command),
1231 __field(unsigned int, xid)
1233 __field(unsigned int, command)
1238 __entry->command = command;
1240 TP_printk("xid=%u fid=0x%llx ioctl cmd=0x%x",
1241 __entry->xid, __entry->fid, __entry->command)
1244 #define DEFINE_SMB3_IOCTL_EVENT(name) \
1245 DEFINE_EVENT(smb3_ioctl_class, smb3_##name, \
1246 TP_PROTO(unsigned int xid, \
1248 unsigned int command), \
1249 TP_ARGS(xid, fid, command))
1251 DEFINE_SMB3_IOCTL_EVENT(ioctl);
1257 DECLARE_EVENT_CLASS(smb3_credit_class,
1258 TP_PROTO(__u64 currmid,
1264 TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight),
1266 __field(__u64, currmid)
1267 __field(__u64, conn_id)
1268 __string(hostname, hostname)
1269 __field(int, credits)
1270 __field(int, credits_to_add)
1271 __field(int, in_flight)
1274 __entry->currmid = currmid;
1275 __entry->conn_id = conn_id;
1276 __assign_str(hostname);
1277 __entry->credits = credits;
1278 __entry->credits_to_add = credits_to_add;
1279 __entry->in_flight = in_flight;
1281 TP_printk("conn_id=0x%llx server=%s current_mid=%llu "
1282 "credits=%d credit_change=%d in_flight=%d",
1284 __get_str(hostname),
1287 __entry->credits_to_add,
1291 #define DEFINE_SMB3_CREDIT_EVENT(name) \
1292 DEFINE_EVENT(smb3_credit_class, smb3_##name, \
1293 TP_PROTO(__u64 currmid, \
1297 int credits_to_add, \
1299 TP_ARGS(currmid, conn_id, hostname, credits, credits_to_add, in_flight))
1301 DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
1302 DEFINE_SMB3_CREDIT_EVENT(reconnect_detected);
1303 DEFINE_SMB3_CREDIT_EVENT(credit_timeout);
1304 DEFINE_SMB3_CREDIT_EVENT(insufficient_credits);
1305 DEFINE_SMB3_CREDIT_EVENT(too_many_credits);
1306 DEFINE_SMB3_CREDIT_EVENT(add_credits);
1307 DEFINE_SMB3_CREDIT_EVENT(adj_credits);
1308 DEFINE_SMB3_CREDIT_EVENT(hdr_credits);
1309 DEFINE_SMB3_CREDIT_EVENT(nblk_credits);
1310 DEFINE_SMB3_CREDIT_EVENT(pend_credits);
1311 DEFINE_SMB3_CREDIT_EVENT(wait_credits);
1312 DEFINE_SMB3_CREDIT_EVENT(waitff_credits);
1313 DEFINE_SMB3_CREDIT_EVENT(overflow_credits);
1314 DEFINE_SMB3_CREDIT_EVENT(set_credits);
1317 TRACE_EVENT(smb3_tcon_ref,
1318 TP_PROTO(unsigned int tcon_debug_id, int ref,
1319 enum smb3_tcon_ref_trace trace),
1320 TP_ARGS(tcon_debug_id, ref, trace),
1322 __field(unsigned int, tcon)
1324 __field(enum smb3_tcon_ref_trace, trace)
1327 __entry->tcon = tcon_debug_id;
1329 __entry->trace = trace;
1331 TP_printk("TC=%08x %s r=%u",
1333 __print_symbolic(__entry->trace, smb3_tcon_ref_traces),
1337 TRACE_EVENT(smb3_rw_credits,
1338 TP_PROTO(unsigned int rreq_debug_id,
1339 unsigned int subreq_debug_index,
1340 unsigned int subreq_credits,
1341 unsigned int server_credits,
1342 int server_in_flight,
1344 enum smb3_rw_credits_trace trace),
1345 TP_ARGS(rreq_debug_id, subreq_debug_index, subreq_credits,
1346 server_credits, server_in_flight, credit_change, trace),
1348 __field(unsigned int, rreq_debug_id)
1349 __field(unsigned int, subreq_debug_index)
1350 __field(unsigned int, subreq_credits)
1351 __field(unsigned int, server_credits)
1352 __field(int, in_flight)
1353 __field(int, credit_change)
1354 __field(enum smb3_rw_credits_trace, trace)
1357 __entry->rreq_debug_id = rreq_debug_id;
1358 __entry->subreq_debug_index = subreq_debug_index;
1359 __entry->subreq_credits = subreq_credits;
1360 __entry->server_credits = server_credits;
1361 __entry->in_flight = server_in_flight;
1362 __entry->credit_change = credit_change;
1363 __entry->trace = trace;
1365 TP_printk("R=%08x[%x] %s cred=%u chg=%d pool=%u ifl=%d",
1366 __entry->rreq_debug_id, __entry->subreq_debug_index,
1367 __print_symbolic(__entry->trace, smb3_rw_credits_traces),
1368 __entry->subreq_credits, __entry->credit_change,
1369 __entry->server_credits, __entry->in_flight)
1375 #endif /* _CIFS_TRACE_H */
1377 #undef TRACE_INCLUDE_PATH
1378 #define TRACE_INCLUDE_PATH .
1379 #define TRACE_INCLUDE_FILE trace
1380 #include <trace/define_trace.h>