cce8414fe7ec2b5e3af9c0660c6db033828cb86f
[muen/linux.git] / fs / cifs / trace.h
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  *   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.
11  *
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.
16  */
17 #undef TRACE_SYSTEM
18 #define TRACE_SYSTEM cifs
19
20 #if !defined(_CIFS_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
21 #define _CIFS_TRACE_H
22
23 #include <linux/tracepoint.h>
24
25 /* For logging errors in read or write */
26 DECLARE_EVENT_CLASS(smb3_rw_err_class,
27         TP_PROTO(unsigned int xid,
28                 __u64   fid,
29                 __u32   tid,
30                 __u64   sesid,
31                 __u64   offset,
32                 __u32   len,
33                 int     rc),
34         TP_ARGS(xid, fid, tid, sesid, offset, len, rc),
35         TP_STRUCT__entry(
36                 __field(unsigned int, xid)
37                 __field(__u64, fid)
38                 __field(__u32, tid)
39                 __field(__u64, sesid)
40                 __field(__u64, offset)
41                 __field(__u32, len)
42                 __field(int, rc)
43         ),
44         TP_fast_assign(
45                 __entry->xid = xid;
46                 __entry->fid = fid;
47                 __entry->tid = tid;
48                 __entry->sesid = sesid;
49                 __entry->offset = offset;
50                 __entry->len = len;
51                 __entry->rc = rc;
52         ),
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)
56 )
57
58 #define DEFINE_SMB3_RW_ERR_EVENT(name)          \
59 DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
60         TP_PROTO(unsigned int xid,              \
61                 __u64   fid,                    \
62                 __u32   tid,                    \
63                 __u64   sesid,                  \
64                 __u64   offset,                 \
65                 __u32   len,                    \
66                 int     rc),                    \
67         TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
68
69 DEFINE_SMB3_RW_ERR_EVENT(write_err);
70 DEFINE_SMB3_RW_ERR_EVENT(read_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_done);
114 DEFINE_SMB3_RW_DONE_EVENT(read_done);
115
116 /*
117  * For handle based calls other than read and write, and get/set info
118  */
119 DECLARE_EVENT_CLASS(smb3_fd_err_class,
120         TP_PROTO(unsigned int xid,
121                 __u64   fid,
122                 __u32   tid,
123                 __u64   sesid,
124                 int     rc),
125         TP_ARGS(xid, fid, tid, sesid, rc),
126         TP_STRUCT__entry(
127                 __field(unsigned int, xid)
128                 __field(__u64, fid)
129                 __field(__u32, tid)
130                 __field(__u64, sesid)
131                 __field(int, rc)
132         ),
133         TP_fast_assign(
134                 __entry->xid = xid;
135                 __entry->fid = fid;
136                 __entry->tid = tid;
137                 __entry->sesid = sesid;
138                 __entry->rc = rc;
139         ),
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,
142                 __entry->rc)
143 )
144
145 #define DEFINE_SMB3_FD_ERR_EVENT(name)          \
146 DEFINE_EVENT(smb3_fd_err_class, smb3_##name,    \
147         TP_PROTO(unsigned int xid,              \
148                 __u64   fid,                    \
149                 __u32   tid,                    \
150                 __u64   sesid,                  \
151                 int     rc),                    \
152         TP_ARGS(xid, fid, tid, sesid, rc))
153
154 DEFINE_SMB3_FD_ERR_EVENT(flush_err);
155 DEFINE_SMB3_FD_ERR_EVENT(lock_err);
156 DEFINE_SMB3_FD_ERR_EVENT(close_err);
157
158 /*
159  * For handle based query/set info calls
160  */
161 DECLARE_EVENT_CLASS(smb3_inf_err_class,
162         TP_PROTO(unsigned int xid,
163                 __u64   fid,
164                 __u32   tid,
165                 __u64   sesid,
166                 __u8    infclass,
167                 __u32   type,
168                 int     rc),
169         TP_ARGS(xid, fid, tid, sesid, infclass, type, rc),
170         TP_STRUCT__entry(
171                 __field(unsigned int, xid)
172                 __field(__u64, fid)
173                 __field(__u32, tid)
174                 __field(__u64, sesid)
175                 __field(__u8, infclass)
176                 __field(__u32, type)
177                 __field(int, rc)
178         ),
179         TP_fast_assign(
180                 __entry->xid = xid;
181                 __entry->fid = fid;
182                 __entry->tid = tid;
183                 __entry->sesid = sesid;
184                 __entry->infclass = infclass;
185                 __entry->type = type;
186                 __entry->rc = rc;
187         ),
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)
191 )
192
193 #define DEFINE_SMB3_INF_ERR_EVENT(name)          \
194 DEFINE_EVENT(smb3_inf_err_class, smb3_##name,    \
195         TP_PROTO(unsigned int xid,              \
196                 __u64   fid,                    \
197                 __u32   tid,                    \
198                 __u64   sesid,                  \
199                 __u8    infclass,               \
200                 __u32   type,                   \
201                 int     rc),                    \
202         TP_ARGS(xid, fid, tid, sesid, infclass, type, rc))
203
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);
207
208 /*
209  * For logging SMB3 Status code and Command for responses which return errors
210  */
211 DECLARE_EVENT_CLASS(smb3_cmd_err_class,
212         TP_PROTO(__u32  tid,
213                 __u64   sesid,
214                 __u16   cmd,
215                 __u64   mid,
216                 __u32   status,
217                 int     rc),
218         TP_ARGS(tid, sesid, cmd, mid, status, rc),
219         TP_STRUCT__entry(
220                 __field(__u32, tid)
221                 __field(__u64, sesid)
222                 __field(__u16, cmd)
223                 __field(__u64, mid)
224                 __field(__u32, status)
225                 __field(int, rc)
226         ),
227         TP_fast_assign(
228                 __entry->tid = tid;
229                 __entry->sesid = sesid;
230                 __entry->cmd = cmd;
231                 __entry->mid = mid;
232                 __entry->status = status;
233                 __entry->rc = rc;
234         ),
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)
238 )
239
240 #define DEFINE_SMB3_CMD_ERR_EVENT(name)          \
241 DEFINE_EVENT(smb3_cmd_err_class, smb3_##name,    \
242         TP_PROTO(__u32  tid,                    \
243                 __u64   sesid,                  \
244                 __u16   cmd,                    \
245                 __u64   mid,                    \
246                 __u32   status,                 \
247                 int     rc),                    \
248         TP_ARGS(tid, sesid, cmd, mid, status, rc))
249
250 DEFINE_SMB3_CMD_ERR_EVENT(cmd_err);
251
252 DECLARE_EVENT_CLASS(smb3_cmd_done_class,
253         TP_PROTO(__u32  tid,
254                 __u64   sesid,
255                 __u16   cmd,
256                 __u64   mid),
257         TP_ARGS(tid, sesid, cmd, mid),
258         TP_STRUCT__entry(
259                 __field(__u32, tid)
260                 __field(__u64, sesid)
261                 __field(__u16, cmd)
262                 __field(__u64, mid)
263         ),
264         TP_fast_assign(
265                 __entry->tid = tid;
266                 __entry->sesid = sesid;
267                 __entry->cmd = cmd;
268                 __entry->mid = mid;
269         ),
270         TP_printk("\tsid=0x%llx tid=0x%x cmd=%u mid=%llu",
271                 __entry->sesid, __entry->tid,
272                 __entry->cmd, __entry->mid)
273 )
274
275 #define DEFINE_SMB3_CMD_DONE_EVENT(name)          \
276 DEFINE_EVENT(smb3_cmd_done_class, smb3_##name,    \
277         TP_PROTO(__u32  tid,                    \
278                 __u64   sesid,                  \
279                 __u16   cmd,                    \
280                 __u64   mid),                   \
281         TP_ARGS(tid, sesid, cmd, mid))
282
283 DEFINE_SMB3_CMD_DONE_EVENT(cmd_done);
284 DEFINE_SMB3_CMD_DONE_EVENT(ses_expired);
285
286 DECLARE_EVENT_CLASS(smb3_mid_class,
287         TP_PROTO(__u16  cmd,
288                 __u64   mid,
289                 __u32   pid,
290                 unsigned long when_sent,
291                 unsigned long when_received),
292         TP_ARGS(cmd, mid, pid, when_sent, when_received),
293         TP_STRUCT__entry(
294                 __field(__u16, cmd)
295                 __field(__u64, mid)
296                 __field(__u32, pid)
297                 __field(unsigned long, when_sent)
298                 __field(unsigned long, when_received)
299         ),
300         TP_fast_assign(
301                 __entry->cmd = cmd;
302                 __entry->mid = mid;
303                 __entry->pid = pid;
304                 __entry->when_sent = when_sent;
305                 __entry->when_received = when_received;
306         ),
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)
310 )
311
312 #define DEFINE_SMB3_MID_EVENT(name)          \
313 DEFINE_EVENT(smb3_mid_class, smb3_##name,    \
314         TP_PROTO(__u16  cmd,                    \
315                 __u64   mid,                    \
316                 __u32   pid,                    \
317                 unsigned long when_sent,        \
318                 unsigned long when_received),   \
319         TP_ARGS(cmd, mid, pid, when_sent, when_received))
320
321 DEFINE_SMB3_MID_EVENT(slow_rsp);
322
323 DECLARE_EVENT_CLASS(smb3_exit_err_class,
324         TP_PROTO(unsigned int xid,
325                 const char *func_name,
326                 int     rc),
327         TP_ARGS(xid, func_name, rc),
328         TP_STRUCT__entry(
329                 __field(unsigned int, xid)
330                 __field(const char *, func_name)
331                 __field(int, rc)
332         ),
333         TP_fast_assign(
334                 __entry->xid = xid;
335                 __entry->func_name = func_name;
336                 __entry->rc = rc;
337         ),
338         TP_printk("\t%s: xid=%u rc=%d",
339                 __entry->func_name, __entry->xid, __entry->rc)
340 )
341
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,          \
346                 int     rc),                    \
347         TP_ARGS(xid, func_name, rc))
348
349 DEFINE_SMB3_EXIT_ERR_EVENT(exit_err);
350
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),
355         TP_STRUCT__entry(
356                 __field(unsigned int, xid)
357                 __field(const char *, func_name)
358         ),
359         TP_fast_assign(
360                 __entry->xid = xid;
361                 __entry->func_name = func_name;
362         ),
363         TP_printk("\t%s: xid=%u",
364                 __entry->func_name, __entry->xid)
365 )
366
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))
372
373 DEFINE_SMB3_ENTER_EXIT_EVENT(enter);
374 DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done);
375
376 /*
377  * For smb2/smb3 open call
378  */
379 DECLARE_EVENT_CLASS(smb3_open_err_class,
380         TP_PROTO(unsigned int xid,
381                 __u32   tid,
382                 __u64   sesid,
383                 int     create_options,
384                 int     desired_access,
385                 int     rc),
386         TP_ARGS(xid, tid, sesid, create_options, desired_access, rc),
387         TP_STRUCT__entry(
388                 __field(unsigned int, xid)
389                 __field(__u32, tid)
390                 __field(__u64, sesid)
391                 __field(int,   create_options)
392                 __field(int, desired_access)
393                 __field(int, rc)
394         ),
395         TP_fast_assign(
396                 __entry->xid = xid;
397                 __entry->tid = tid;
398                 __entry->sesid = sesid;
399                 __entry->create_options = create_options;
400                 __entry->desired_access = desired_access;
401                 __entry->rc = rc;
402         ),
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)
406 )
407
408 #define DEFINE_SMB3_OPEN_ERR_EVENT(name)          \
409 DEFINE_EVENT(smb3_open_err_class, smb3_##name,    \
410         TP_PROTO(unsigned int xid,              \
411                 __u32   tid,                    \
412                 __u64   sesid,                  \
413                 int     create_options,         \
414                 int     desired_access,         \
415                 int     rc),                    \
416         TP_ARGS(xid, tid, sesid, create_options, desired_access, rc))
417
418 DEFINE_SMB3_OPEN_ERR_EVENT(open_err);
419 DEFINE_SMB3_OPEN_ERR_EVENT(posix_mkdir_err);
420
421 DECLARE_EVENT_CLASS(smb3_open_done_class,
422         TP_PROTO(unsigned int xid,
423                 __u64   fid,
424                 __u32   tid,
425                 __u64   sesid,
426                 int     create_options,
427                 int     desired_access),
428         TP_ARGS(xid, fid, tid, sesid, create_options, desired_access),
429         TP_STRUCT__entry(
430                 __field(unsigned int, xid)
431                 __field(__u64, fid)
432                 __field(__u32, tid)
433                 __field(__u64, sesid)
434                 __field(int, create_options)
435                 __field(int, desired_access)
436         ),
437         TP_fast_assign(
438                 __entry->xid = xid;
439                 __entry->fid = fid;
440                 __entry->tid = tid;
441                 __entry->sesid = sesid;
442                 __entry->create_options = create_options;
443                 __entry->desired_access = desired_access;
444         ),
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)
448 )
449
450 #define DEFINE_SMB3_OPEN_DONE_EVENT(name)        \
451 DEFINE_EVENT(smb3_open_done_class, smb3_##name,  \
452         TP_PROTO(unsigned int xid,              \
453                 __u64   fid,                    \
454                 __u32   tid,                    \
455                 __u64   sesid,                  \
456                 int     create_options,         \
457                 int     desired_access),        \
458         TP_ARGS(xid, fid, tid, sesid, create_options, desired_access))
459
460 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
461 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
462
463
464 DECLARE_EVENT_CLASS(smb3_lease_done_class,
465         TP_PROTO(__u32  lease_state,
466                 __u32   tid,
467                 __u64   sesid,
468                 __u64   lease_key_low,
469                 __u64   lease_key_high),
470         TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high),
471         TP_STRUCT__entry(
472                 __field(__u32, lease_state)
473                 __field(__u32, tid)
474                 __field(__u64, sesid)
475                 __field(__u64, lease_key_low)
476                 __field(__u64, lease_key_high)
477         ),
478         TP_fast_assign(
479                 __entry->lease_state = lease_state;
480                 __entry->tid = tid;
481                 __entry->sesid = sesid;
482                 __entry->lease_key_low = lease_key_low;
483                 __entry->lease_key_high = lease_key_high;
484         ),
485         TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x",
486                 __entry->sesid, __entry->tid, __entry->lease_key_high,
487                 __entry->lease_key_low, __entry->lease_state)
488 )
489
490 #define DEFINE_SMB3_LEASE_DONE_EVENT(name)        \
491 DEFINE_EVENT(smb3_lease_done_class, smb3_##name,  \
492         TP_PROTO(__u32  lease_state,            \
493                 __u32   tid,                    \
494                 __u64   sesid,                  \
495                 __u64   lease_key_low,          \
496                 __u64   lease_key_high),        \
497         TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high))
498
499 DEFINE_SMB3_LEASE_DONE_EVENT(lease_done);
500
501 DECLARE_EVENT_CLASS(smb3_lease_err_class,
502         TP_PROTO(__u32  lease_state,
503                 __u32   tid,
504                 __u64   sesid,
505                 __u64   lease_key_low,
506                 __u64   lease_key_high,
507                 int     rc),
508         TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc),
509         TP_STRUCT__entry(
510                 __field(__u32, lease_state)
511                 __field(__u32, tid)
512                 __field(__u64, sesid)
513                 __field(__u64, lease_key_low)
514                 __field(__u64, lease_key_high)
515                 __field(int, rc)
516         ),
517         TP_fast_assign(
518                 __entry->lease_state = lease_state;
519                 __entry->tid = tid;
520                 __entry->sesid = sesid;
521                 __entry->lease_key_low = lease_key_low;
522                 __entry->lease_key_high = lease_key_high;
523                 __entry->rc = rc;
524         ),
525         TP_printk("sid=0x%llx tid=0x%x lease_key=0x%llx%llx lease_state=0x%x rc=%d",
526                 __entry->sesid, __entry->tid, __entry->lease_key_high,
527                 __entry->lease_key_low, __entry->lease_state, __entry->rc)
528 )
529
530 #define DEFINE_SMB3_LEASE_ERR_EVENT(name)        \
531 DEFINE_EVENT(smb3_lease_err_class, smb3_##name,  \
532         TP_PROTO(__u32  lease_state,            \
533                 __u32   tid,                    \
534                 __u64   sesid,                  \
535                 __u64   lease_key_low,          \
536                 __u64   lease_key_high,         \
537                 int     rc),                    \
538         TP_ARGS(lease_state, tid, sesid, lease_key_low, lease_key_high, rc))
539
540 DEFINE_SMB3_LEASE_ERR_EVENT(lease_err);
541
542 DECLARE_EVENT_CLASS(smb3_reconnect_class,
543         TP_PROTO(__u64  currmid,
544                 char *hostname),
545         TP_ARGS(currmid, hostname),
546         TP_STRUCT__entry(
547                 __field(__u64, currmid)
548                 __field(char *, hostname)
549         ),
550         TP_fast_assign(
551                 __entry->currmid = currmid;
552                 __entry->hostname = hostname;
553         ),
554         TP_printk("server=%s current_mid=0x%llx",
555                 __entry->hostname,
556                 __entry->currmid)
557 )
558
559 #define DEFINE_SMB3_RECONNECT_EVENT(name)        \
560 DEFINE_EVENT(smb3_reconnect_class, smb3_##name,  \
561         TP_PROTO(__u64  currmid,                \
562                 char *hostname),                \
563         TP_ARGS(currmid, hostname))
564
565 DEFINE_SMB3_RECONNECT_EVENT(reconnect);
566 DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
567
568 DECLARE_EVENT_CLASS(smb3_credit_class,
569         TP_PROTO(__u64  currmid,
570                 char *hostname,
571                 int credits),
572         TP_ARGS(currmid, hostname, credits),
573         TP_STRUCT__entry(
574                 __field(__u64, currmid)
575                 __field(char *, hostname)
576                 __field(int, credits)
577         ),
578         TP_fast_assign(
579                 __entry->currmid = currmid;
580                 __entry->hostname = hostname;
581                 __entry->credits = credits;
582         ),
583         TP_printk("server=%s current_mid=0x%llx credits=%d",
584                 __entry->hostname,
585                 __entry->currmid,
586                 __entry->credits)
587 )
588
589 #define DEFINE_SMB3_CREDIT_EVENT(name)        \
590 DEFINE_EVENT(smb3_credit_class, smb3_##name,  \
591         TP_PROTO(__u64  currmid,                \
592                 char *hostname,                 \
593                 int  credits),                  \
594         TP_ARGS(currmid, hostname, credits))
595
596 DEFINE_SMB3_CREDIT_EVENT(reconnect_with_invalid_credits);
597
598 #endif /* _CIFS_TRACE_H */
599
600 #undef TRACE_INCLUDE_PATH
601 #define TRACE_INCLUDE_PATH .
602 #define TRACE_INCLUDE_FILE trace
603 #include <trace/define_trace.h>