]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blob - fs/cifs/cifs_debug.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156
[mirror_ubuntu-hirsute-kernel.git] / fs / cifs / cifs_debug.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3 *
4 * Copyright (c) International Business Machines Corp., 2000,2002
5 * Modified by Steve French (sfrench@us.ibm.com)
6 */
7
8 #ifndef _H_CIFS_DEBUG
9 #define _H_CIFS_DEBUG
10
11 void cifs_dump_mem(char *label, void *data, int length);
12 void cifs_dump_detail(void *buf, struct TCP_Server_Info *ptcp_info);
13 void cifs_dump_mids(struct TCP_Server_Info *);
14 extern bool traceSMB; /* flag which enables the function below */
15 void dump_smb(void *, int);
16 #define CIFS_INFO 0x01
17 #define CIFS_RC 0x02
18 #define CIFS_TIMER 0x04
19
20 #define VFS 1
21 #define FYI 2
22 extern int cifsFYI;
23 #ifdef CONFIG_CIFS_DEBUG2
24 #define NOISY 4
25 #else
26 #define NOISY 0
27 #endif
28 #define ONCE 8
29
30 /*
31 * debug ON
32 * --------
33 */
34 #ifdef CONFIG_CIFS_DEBUG
35
36
37 /*
38 * When adding tracepoints and debug messages we have various choices.
39 * Some considerations:
40 *
41 * Use cifs_dbg(VFS, ...) for things we always want logged, and the user to see
42 * cifs_info(...) slightly less important, admin can filter via loglevel > 6
43 * cifs_dbg(FYI, ...) minor debugging messages, off by default
44 * trace_smb3_* ftrace functions are preferred for complex debug messages
45 * intended for developers or experienced admins, off by default
46 */
47
48 /* Information level messages, minor events */
49 #define cifs_info_func(ratefunc, fmt, ...) \
50 do { \
51 pr_info_ ## ratefunc("CIFS: " fmt, ##__VA_ARGS__); \
52 } while (0)
53
54 #define cifs_info(fmt, ...) \
55 do { \
56 cifs_info_func(ratelimited, fmt, ##__VA_ARGS__); \
57 } while (0)
58
59 /* information message: e.g., configuration, major event */
60 #define cifs_dbg_func(ratefunc, type, fmt, ...) \
61 do { \
62 if ((type) & FYI && cifsFYI & CIFS_INFO) { \
63 pr_debug_ ## ratefunc("%s: " \
64 fmt, __FILE__, ##__VA_ARGS__); \
65 } else if ((type) & VFS) { \
66 pr_err_ ## ratefunc("CIFS VFS: " \
67 fmt, ##__VA_ARGS__); \
68 } else if ((type) & NOISY && (NOISY != 0)) { \
69 pr_debug_ ## ratefunc(fmt, ##__VA_ARGS__); \
70 } \
71 } while (0)
72
73 #define cifs_dbg(type, fmt, ...) \
74 do { \
75 if ((type) & ONCE) \
76 cifs_dbg_func(once, \
77 type, fmt, ##__VA_ARGS__); \
78 else \
79 cifs_dbg_func(ratelimited, \
80 type, fmt, ##__VA_ARGS__); \
81 } while (0)
82
83 /*
84 * debug OFF
85 * ---------
86 */
87 #else /* _CIFS_DEBUG */
88 #define cifs_dbg(type, fmt, ...) \
89 do { \
90 if (0) \
91 pr_debug(fmt, ##__VA_ARGS__); \
92 } while (0)
93
94 #define cifs_info(fmt, ...) \
95 do { \
96 pr_info("CIFS: "fmt, ##__VA_ARGS__); \
97 } while (0)
98 #endif
99
100 #endif /* _H_CIFS_DEBUG */