1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2018, Microsoft Corporation.
8 #define TRACE_SYSTEM cifs
10 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
13 #include <linux/tracepoint.h>
15 /* For logging errors in read or write */
16 DECLARE_EVENT_CLASS(smb3_rw_err_class,
17 TP_PROTO(unsigned int xid,
24 TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
26 __field(unsigned int, xid)
30 __field(__u64, offset)
38 __entry->sesid = sesid;
39 __entry->offset = offset;
43 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
44 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
45 __entry->offset, __entry->len, __entry->rc)
48 #define DEFINE_SMB3_RW_ERR_EVENT(name) \
49 DEFINE_EVENT(smb3_rw_err_class, smb3_##name, \
50 TP_PROTO(unsigned int xid, \
57 TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
59 DEFINE_SMB3_RW_ERR_EVENT(write_err);
60 DEFINE_SMB3_RW_ERR_EVENT(read_err);
63 /* For logging successful read or write */
64 DECLARE_EVENT_CLASS(smb3_rw_done_class,
65 TP_PROTO(unsigned int xid,
71 TP_ARGS(xid, fid, tid, sesid, offset, len),
73 __field(unsigned int, xid)
77 __field(__u64, offset)
84 __entry->sesid = sesid;
85 __entry->offset = offset;
88 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x",
89 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
90 __entry->offset, __entry->len)
93 #define DEFINE_SMB3_RW_DONE_EVENT(name) \
94 DEFINE_EVENT(smb3_rw_done_class, smb3_##name, \
95 TP_PROTO(unsigned int xid, \
101 TP_ARGS(xid, fid, tid, sesid, offset, len))
103 DEFINE_SMB3_RW_DONE_EVENT(write_done);
104 DEFINE_SMB3_RW_DONE_EVENT(read_done);
107 * For handle based calls other than read and write, and get/set info
109 DECLARE_EVENT_CLASS(smb3_fd_err_class,
110 TP_PROTO(unsigned int xid,
115 TP_ARGS(xid, fid, tid, sesid, rc),
117 __field(unsigned int, xid)
120 __field(__u64, sesid)
127 __entry->sesid = sesid;
130 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
131 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
135 #define DEFINE_SMB3_FD_ERR_EVENT(name) \
136 DEFINE_EVENT(smb3_fd_err_class, smb3_##name, \
137 TP_PROTO(unsigned int xid, \
142 TP_ARGS(xid, fid, tid, sesid, rc))
144 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
145 DEFINE_SMB3_FD_ERR_EVENT(lock_err);
146 DEFINE_SMB3_FD_ERR_EVENT(close_err);
149 * For handle based query/set info calls
151 DECLARE_EVENT_CLASS(smb3_inf_err_class,
152 TP_PROTO(unsigned int xid,
159 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
161 __field(unsigned int, xid)
164 __field(__u64, sesid)
165 __field(__u8, infclass)
173 __entry->sesid = sesid;
174 __entry->infclass = infclass;
175 __entry->type = type;
178 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
179 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
180 __entry->infclass, __entry->type, __entry->rc)
183 #define DEFINE_SMB3_INF_ERR_EVENT(name) \
184 DEFINE_EVENT(smb3_inf_err_class, smb3_##name, \
185 TP_PROTO(unsigned int xid, \
192 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
194 DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
195 DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
196 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
199 * For logging SMB3 Status code and Command for responses which return errors
201 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
208 TP_ARGS(tid, sesid, cmd, mid, status, rc),
211 __field(__u64, sesid)
214 __field(__u32, status)
219 __entry->sesid = sesid;
222 __entry->status = status;
225 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
226 __entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
227 __entry->status, __entry->rc)
230 #define DEFINE_SMB3_CMD_ERR_EVENT(name) \
231 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name, \
232 TP_PROTO(__u32 tid, \
238 TP_ARGS(tid, sesid, cmd, mid, status, rc))
240 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
242 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
247 TP_ARGS(tid, sesid, cmd, mid),
250 __field(__u64, sesid)
256 __entry->sesid = sesid;
260 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu",
261 __entry->sesid, __entry->tid,
262 __entry->cmd, __entry->mid)
265 #define DEFINE_SMB3_CMD_DONE_EVENT(name) \
266 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name, \
267 TP_PROTO(__u32 tid, \
271 TP_ARGS(tid, sesid, cmd, mid))
273 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
274 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
276 DECLARE_EVENT_CLASS(smb3_mid_class,
280 unsigned long when_sent,
281 unsigned long when_received),
282 TP_ARGS(cmd, mid, pid, when_sent, when_received),
287 __field(unsigned long, when_sent)
288 __field(unsigned long, when_received)
294 __entry->when_sent = when_sent;
295 __entry->when_received = when_received;
297 TP_printk("\tcmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
298 __entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
299 __entry->when_received)
302 #define DEFINE_SMB3_MID_EVENT(name) \
303 DEFINE_EVENT(smb3_mid_class, smb3_##name, \
304 TP_PROTO(__u16 cmd, \
307 unsigned long when_sent, \
308 unsigned long when_received), \
309 TP_ARGS(cmd, mid, pid, when_sent, when_received))
311 DEFINE_SMB3_MID_EVENT(slow_rsp);
313 DECLARE_EVENT_CLASS(smb3_exit_err_class,
314 TP_PROTO(unsigned int xid,
315 const char *func_name,
317 TP_ARGS(xid, func_name, rc),
319 __field(unsigned int, xid)
320 __field(const char *, func_name)
325 __entry->func_name = func_name;
328 TP_printk("\t%s: xid=%u rc=%d",
329 __entry->func_name, __entry->xid, __entry->rc)
332 #define DEFINE_SMB3_EXIT_ERR_EVENT(name) \
333 DEFINE_EVENT(smb3_exit_err_class, smb3_##name, \
334 TP_PROTO(unsigned int xid, \
335 const char *func_name, \
337 TP_ARGS(xid, func_name, rc))
339 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
341 DECLARE_EVENT_CLASS(smb3_enter_exit_class,
342 TP_PROTO(unsigned int xid,
343 const char *func_name),
344 TP_ARGS(xid, func_name),
346 __field(unsigned int, xid)
347 __field(const char *, func_name)
351 __entry->func_name = func_name;
353 TP_printk("\t%s: xid=%u",
354 __entry->func_name, __entry->xid)
357 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name) \
358 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name, \
359 TP_PROTO(unsigned int xid, \
360 const char *func_name), \
361 TP_ARGS(xid, func_name))
363 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
364 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
367 * For SMB2/SMB3 tree connect
370 DECLARE_EVENT_CLASS(smb3_tcon_class,
371 TP_PROTO(unsigned int xid,
374 const char *unc_name,
376 TP_ARGS(xid, tid, sesid, unc_name, rc),
378 __field(unsigned int, xid)
380 __field(__u64, sesid)
381 __field(const char *, unc_name)
387 __entry->sesid = sesid;
388 __entry->unc_name = unc_name;
391 TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d",
392 __entry->xid, __entry->sesid, __entry->tid,
393 __entry->unc_name, __entry->rc)
396 #define DEFINE_SMB3_TCON_EVENT(name) \
397 DEFINE_EVENT(smb3_tcon_class, smb3_##name, \
398 TP_PROTO(unsigned int xid, \
401 const char *unc_name, \
403 TP_ARGS(xid, tid, sesid, unc_name, rc))
405 DEFINE_SMB3_TCON_EVENT(tcon);
409 * For smb2/smb3 open call
411 DECLARE_EVENT_CLASS(smb3_open_err_class,
412 TP_PROTO(unsigned int xid,
418 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
420 __field(unsigned int, xid)
422 __field(__u64, sesid)
423 __field(int, create_options)
424 __field(int, desired_access)
430 __entry->sesid = sesid;
431 __entry->create_options = create_options;
432 __entry->desired_access = desired_access;
435 TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
436 __entry->xid, __entry->sesid, __entry->tid,
437 __entry->create_options, __entry->desired_access, __entry->rc)
440 #define DEFINE_SMB3_OPEN_ERR_EVENT(name) \
441 DEFINE_EVENT(smb3_open_err_class, smb3_##name, \
442 TP_PROTO(unsigned int xid, \
445 int create_options, \
446 int desired_access, \
448 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
450 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
451 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
453 DECLARE_EVENT_CLASS(smb3_open_done_class,
454 TP_PROTO(unsigned int xid,
460 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
462 __field(unsigned int, xid)
465 __field(__u64, sesid)
466 __field(int, create_options)
467 __field(int, desired_access)
473 __entry->sesid = sesid;
474 __entry->create_options = create_options;
475 __entry->desired_access = desired_access;
477 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x",
478 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
479 __entry->create_options, __entry->desired_access)
482 #define DEFINE_SMB3_OPEN_DONE_EVENT(name) \
483 DEFINE_EVENT(smb3_open_done_class, smb3_##name, \
484 TP_PROTO(unsigned int xid, \
488 int create_options, \
489 int desired_access), \
490 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
492 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
493 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
496 DECLARE_EVENT_CLASS(smb3_lease_done_class,
497 TP_PROTO(__u32 lease_state,
501 __u64 lease_key_high),
502 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
504 __field(__u32, lease_state)
506 __field(__u64, sesid)
507 __field(__u64, lease_key_low)
508 __field(__u64, lease_key_high)
511 __entry->lease_state = lease_state;
513 __entry->sesid = sesid;
514 __entry->lease_key_low = lease_key_low;
515 __entry->lease_key_high = lease_key_high;
517 TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
518 __entry->sesid, __entry->tid, __entry->lease_key_high,
519 __entry->lease_key_low, __entry->lease_state)
522 #define DEFINE_SMB3_LEASE_DONE_EVENT(name) \
523 DEFINE_EVENT(smb3_lease_done_class, smb3_##name, \
524 TP_PROTO(__u32 lease_state, \
527 __u64 lease_key_low, \
528 __u64 lease_key_high), \
529 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
531 DEFINE_SMB3_LEASE_DONE_EVENT(lease_done);
533 DECLARE_EVENT_CLASS(smb3_lease_err_class,
534 TP_PROTO(__u32 lease_state,
538 __u64 lease_key_high,
540 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
542 __field(__u32, lease_state)
544 __field(__u64, sesid)
545 __field(__u64, lease_key_low)
546 __field(__u64, lease_key_high)
550 __entry->lease_state = lease_state;
552 __entry->sesid = sesid;
553 __entry->lease_key_low = lease_key_low;
554 __entry->lease_key_high = lease_key_high;
557 TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
558 __entry->sesid, __entry->tid, __entry->lease_key_high,
559 __entry->lease_key_low, __entry->lease_state, __entry->rc)
562 #define DEFINE_SMB3_LEASE_ERR_EVENT(name) \
563 DEFINE_EVENT(smb3_lease_err_class, smb3_##name, \
564 TP_PROTO(__u32 lease_state, \
567 __u64 lease_key_low, \
568 __u64 lease_key_high, \
570 TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
572 DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
574 DECLARE_EVENT_CLASS(smb3_reconnect_class,
575 TP_PROTO(__u64 currmid,
577 TP_ARGS(currmid, hostname),
579 __field(__u64, currmid)
580 __field(char *, hostname)
583 __entry->currmid = currmid;
584 __entry->hostname = hostname;
586 TP_printk("server=%s current_mid=0x%llx",
591 #define DEFINE_SMB3_RECONNECT_EVENT(name) \
592 DEFINE_EVENT(smb3_reconnect_class, smb3_##name, \
593 TP_PROTO(__u64 currmid, \
595 TP_ARGS(currmid, hostname))
597 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
598 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
600 DECLARE_EVENT_CLASS(smb3_credit_class,
601 TP_PROTO(__u64 currmid,
604 TP_ARGS(currmid, hostname, credits),
606 __field(__u64, currmid)
607 __field(char *, hostname)
608 __field(int, credits)
611 __entry->currmid = currmid;
612 __entry->hostname = hostname;
613 __entry->credits = credits;
615 TP_printk("server=%s current_mid=0x%llx credits=%d",
621 #define DEFINE_SMB3_CREDIT_EVENT(name) \
622 DEFINE_EVENT(smb3_credit_class, smb3_##name, \
623 TP_PROTO(__u64 currmid, \
626 TP_ARGS(currmid, hostname, credits))
628 DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
630 #endif /* _CIFS_TRACE_H */
632 #undef TRACE_INCLUDE_PATH
633 #define TRACE_INCLUDE_PATH .
634 #define TRACE_INCLUDE_FILE trace
635 #include <trace/define_trace.h>