1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2018, Microsoft Corporation.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
15 * the GNU General Public License for more details.
18 #define TRACE_SYSTEM cifs
20 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
23 #include <linux/tracepoint.h>
25 /* For logging errors in read or write */
26 DECLARE_EVENT_CLASS(smb3_rw_err_class,
27 TP_PROTO(unsigned int xid,
34 TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
36 __field(unsigned int, xid)
40 __field(__u64, offset)
48 __entry->sesid = sesid;
49 __entry->offset = offset;
53 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx offset=0x%llx len=0x%x rc=%d",
54 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
55 __entry->offset, __entry->len, __entry->rc)
58 #define DEFINE_SMB3_RW_ERR_EVENT(name) \
59 DEFINE_EVENT(smb3_rw_err_class, smb3_##name, \
60 TP_PROTO(unsigned int xid, \
67 TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
69 DEFINE_SMB3_RW_ERR_EVENT(write_err);
70 DEFINE_SMB3_RW_ERR_EVENT(read_err);
73 /* For logging successful read or write */
74 DECLARE_EVENT_CLASS(smb3_rw_done_class,
75 TP_PROTO(unsigned int xid,
81 TP_ARGS(xid, fid, tid, sesid, offset, len),
83 __field(unsigned int, xid)
87 __field(__u64, offset)
94 __entry->sesid = sesid;
95 __entry->offset = offset;
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)
103 #define DEFINE_SMB3_RW_DONE_EVENT(name) \
104 DEFINE_EVENT(smb3_rw_done_class, smb3_##name, \
105 TP_PROTO(unsigned int xid, \
111 TP_ARGS(xid, fid, tid, sesid, offset, len))
113 DEFINE_SMB3_RW_DONE_EVENT(write_done);
114 DEFINE_SMB3_RW_DONE_EVENT(read_done);
117 * For handle based calls other than read and write, and get/set info
119 DECLARE_EVENT_CLASS(smb3_fd_err_class,
120 TP_PROTO(unsigned int xid,
125 TP_ARGS(xid, fid, tid, sesid, rc),
127 __field(unsigned int, xid)
130 __field(__u64, sesid)
137 __entry->sesid = sesid;
140 TP_printk("\txid=%u sid=0x%llx tid=0x%x fid=0x%llx rc=%d",
141 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
145 #define DEFINE_SMB3_FD_ERR_EVENT(name) \
146 DEFINE_EVENT(smb3_fd_err_class, smb3_##name, \
147 TP_PROTO(unsigned int xid, \
152 TP_ARGS(xid, fid, tid, sesid, rc))
154 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
155 DEFINE_SMB3_FD_ERR_EVENT(lock_err);
156 DEFINE_SMB3_FD_ERR_EVENT(close_err);
159 * For handle based query/set info calls
161 DECLARE_EVENT_CLASS(smb3_inf_err_class,
162 TP_PROTO(unsigned int xid,
169 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
171 __field(unsigned int, xid)
174 __field(__u64, sesid)
175 __field(__u8, infclass)
183 __entry->sesid = sesid;
184 __entry->infclass = infclass;
185 __entry->type = type;
188 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx class=%u type=0x%x rc=%d",
189 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
190 __entry->infclass, __entry->type, __entry->rc)
193 #define DEFINE_SMB3_INF_ERR_EVENT(name) \
194 DEFINE_EVENT(smb3_inf_err_class, smb3_##name, \
195 TP_PROTO(unsigned int xid, \
202 TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
204 DEFINE_SMB3_INF_ERR_EVENT(query_info_err);
205 DEFINE_SMB3_INF_ERR_EVENT(set_info_err);
206 DEFINE_SMB3_INF_ERR_EVENT(fsctl_err);
209 * For logging SMB3 Status code and Command for responses which return errors
211 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
218 TP_ARGS(tid, sesid, cmd, mid, status, rc),
221 __field(__u64, sesid)
224 __field(__u32, status)
229 __entry->sesid = sesid;
232 __entry->status = status;
235 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu status=0x%x rc=%d",
236 __entry->sesid, __entry->tid, __entry->cmd, __entry->mid,
237 __entry->status, __entry->rc)
240 #define DEFINE_SMB3_CMD_ERR_EVENT(name) \
241 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name, \
242 TP_PROTO(__u32 tid, \
248 TP_ARGS(tid, sesid, cmd, mid, status, rc))
250 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
252 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
257 TP_ARGS(tid, sesid, cmd, mid),
260 __field(__u64, sesid)
266 __entry->sesid = sesid;
270 TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu",
271 __entry->sesid, __entry->tid,
272 __entry->cmd, __entry->mid)
275 #define DEFINE_SMB3_CMD_DONE_EVENT(name) \
276 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name, \
277 TP_PROTO(__u32 tid, \
281 TP_ARGS(tid, sesid, cmd, mid))
283 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
284 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
286 DECLARE_EVENT_CLASS(smb3_mid_class,
290 unsigned long when_sent,
291 unsigned long when_received),
292 TP_ARGS(cmd, mid, pid, when_sent, when_received),
297 __field(unsigned long, when_sent)
298 __field(unsigned long, when_received)
304 __entry->when_sent = when_sent;
305 __entry->when_received = when_received;
307 TP_printk("\tcmd=%u mid=%llu pid=%u, when_sent=%lu when_rcv=%lu",
308 __entry->cmd, __entry->mid, __entry->pid, __entry->when_sent,
309 __entry->when_received)
312 #define DEFINE_SMB3_MID_EVENT(name) \
313 DEFINE_EVENT(smb3_mid_class, smb3_##name, \
314 TP_PROTO(__u16 cmd, \
317 unsigned long when_sent, \
318 unsigned long when_received), \
319 TP_ARGS(cmd, mid, pid, when_sent, when_received))
321 DEFINE_SMB3_MID_EVENT(slow_rsp);
323 DECLARE_EVENT_CLASS(smb3_exit_err_class,
324 TP_PROTO(unsigned int xid,
325 const char *func_name,
327 TP_ARGS(xid, func_name, rc),
329 __field(unsigned int, xid)
330 __field(const char *, func_name)
335 __entry->func_name = func_name;
338 TP_printk("\t%s: xid=%u rc=%d",
339 __entry->func_name, __entry->xid, __entry->rc)
342 #define DEFINE_SMB3_EXIT_ERR_EVENT(name) \
343 DEFINE_EVENT(smb3_exit_err_class, smb3_##name, \
344 TP_PROTO(unsigned int xid, \
345 const char *func_name, \
347 TP_ARGS(xid, func_name, rc))
349 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
351 DECLARE_EVENT_CLASS(smb3_enter_exit_class,
352 TP_PROTO(unsigned int xid,
353 const char *func_name),
354 TP_ARGS(xid, func_name),
356 __field(unsigned int, xid)
357 __field(const char *, func_name)
361 __entry->func_name = func_name;
363 TP_printk("\t%s: xid=%u",
364 __entry->func_name, __entry->xid)
367 #define DEFINE_SMB3_ENTER_EXIT_EVENT(name) \
368 DEFINE_EVENT(smb3_enter_exit_class, smb3_##name, \
369 TP_PROTO(unsigned int xid, \
370 const char *func_name), \
371 TP_ARGS(xid, func_name))
373 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
374 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
377 * For smb2/smb3 open call
379 DECLARE_EVENT_CLASS(smb3_open_err_class,
380 TP_PROTO(unsigned int xid,
386 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
388 __field(unsigned int, xid)
390 __field(__u64, sesid)
391 __field(int, create_options)
392 __field(int, desired_access)
398 __entry->sesid = sesid;
399 __entry->create_options = create_options;
400 __entry->desired_access = desired_access;
403 TP_printk("xid=%u sid=0x%llx tid=0x%x cr_opts=0x%x des_access=0x%x rc=%d",
404 __entry->xid, __entry->sesid, __entry->tid,
405 __entry->create_options, __entry->desired_access, __entry->rc)
408 #define DEFINE_SMB3_OPEN_ERR_EVENT(name) \
409 DEFINE_EVENT(smb3_open_err_class, smb3_##name, \
410 TP_PROTO(unsigned int xid, \
413 int create_options, \
414 int desired_access, \
416 TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
418 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
419 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
421 DECLARE_EVENT_CLASS(smb3_open_done_class,
422 TP_PROTO(unsigned int xid,
428 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
430 __field(unsigned int, xid)
433 __field(__u64, sesid)
434 __field(int, create_options)
435 __field(int, desired_access)
441 __entry->sesid = sesid;
442 __entry->create_options = create_options;
443 __entry->desired_access = desired_access;
445 TP_printk("xid=%u sid=0x%llx tid=0x%x fid=0x%llx cr_opts=0x%x des_access=0x%x",
446 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
447 __entry->create_options, __entry->desired_access)
450 #define DEFINE_SMB3_OPEN_DONE_EVENT(name) \
451 DEFINE_EVENT(smb3_open_done_class, smb3_##name, \
452 TP_PROTO(unsigned int xid, \
456 int create_options, \
457 int desired_access), \
458 TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
460 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
461 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
463 DECLARE_EVENT_CLASS(smb3_reconnect_class,
464 TP_PROTO(__u64 currmid,
466 TP_ARGS(currmid, hostname),
468 __field(__u64, currmid)
469 __field(char *, hostname)
472 __entry->currmid = currmid;
473 __entry->hostname = hostname;
475 TP_printk("server=%s current_mid=0x%llx",
480 #define DEFINE_SMB3_RECONNECT_EVENT(name) \
481 DEFINE_EVENT(smb3_reconnect_class, smb3_##name, \
482 TP_PROTO(__u64 currmid, \
484 TP_ARGS(currmid, hostname))
486 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
487 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
489 #endif /* _CIFS_TRACE_H */
491 #undef TRACE_INCLUDE_PATH
492 #define TRACE_INCLUDE_PATH .
493 #define TRACE_INCLUDE_FILE trace
494 #include <trace/define_trace.h>