xref: /OK3568_Linux_fs/kernel/fs/cifs/cifs_debug.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  *   Copyright (c) International Business Machines  Corp., 2000,2002
5*4882a593Smuzhiyun  *   Modified by Steve French (sfrench@us.ibm.com)
6*4882a593Smuzhiyun */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _H_CIFS_DEBUG
9*4882a593Smuzhiyun #define _H_CIFS_DEBUG
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifdef pr_fmt
12*4882a593Smuzhiyun #undef pr_fmt
13*4882a593Smuzhiyun #endif
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #define pr_fmt(fmt) "CIFS: " fmt
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun void cifs_dump_mem(char *label, void *data, int length);
18*4882a593Smuzhiyun void cifs_dump_detail(void *buf, struct TCP_Server_Info *ptcp_info);
19*4882a593Smuzhiyun void cifs_dump_mids(struct TCP_Server_Info *);
20*4882a593Smuzhiyun extern bool traceSMB;		/* flag which enables the function below */
21*4882a593Smuzhiyun void dump_smb(void *, int);
22*4882a593Smuzhiyun #define CIFS_INFO	0x01
23*4882a593Smuzhiyun #define CIFS_RC		0x02
24*4882a593Smuzhiyun #define CIFS_TIMER	0x04
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define VFS 1
27*4882a593Smuzhiyun #define FYI 2
28*4882a593Smuzhiyun extern int cifsFYI;
29*4882a593Smuzhiyun #ifdef CONFIG_CIFS_DEBUG2
30*4882a593Smuzhiyun #define NOISY 4
31*4882a593Smuzhiyun #else
32*4882a593Smuzhiyun #define NOISY 0
33*4882a593Smuzhiyun #endif
34*4882a593Smuzhiyun #define ONCE 8
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun /*
37*4882a593Smuzhiyun  *	debug ON
38*4882a593Smuzhiyun  *	--------
39*4882a593Smuzhiyun  */
40*4882a593Smuzhiyun #ifdef CONFIG_CIFS_DEBUG
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /*
44*4882a593Smuzhiyun  * When adding tracepoints and debug messages we have various choices.
45*4882a593Smuzhiyun  * Some considerations:
46*4882a593Smuzhiyun  *
47*4882a593Smuzhiyun  * Use cifs_dbg(VFS, ...) for things we always want logged, and the user to see
48*4882a593Smuzhiyun  *     cifs_info(...) slightly less important, admin can filter via loglevel > 6
49*4882a593Smuzhiyun  *     cifs_dbg(FYI, ...) minor debugging messages, off by default
50*4882a593Smuzhiyun  *     trace_smb3_*  ftrace functions are preferred for complex debug messages
51*4882a593Smuzhiyun  *                 intended for developers or experienced admins, off by default
52*4882a593Smuzhiyun  */
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /* Information level messages, minor events */
55*4882a593Smuzhiyun #define cifs_info_func(ratefunc, fmt, ...)				\
56*4882a593Smuzhiyun 	pr_info_ ## ratefunc(fmt, ##__VA_ARGS__)
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #define cifs_info(fmt, ...)						\
59*4882a593Smuzhiyun 	cifs_info_func(ratelimited, fmt, ##__VA_ARGS__)
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /* information message: e.g., configuration, major event */
62*4882a593Smuzhiyun #define cifs_dbg_func(ratefunc, type, fmt, ...)				\
63*4882a593Smuzhiyun do {									\
64*4882a593Smuzhiyun 	if ((type) & FYI && cifsFYI & CIFS_INFO) {			\
65*4882a593Smuzhiyun 		pr_debug_ ## ratefunc("%s: " fmt,			\
66*4882a593Smuzhiyun 				      __FILE__, ##__VA_ARGS__);		\
67*4882a593Smuzhiyun 	} else if ((type) & VFS) {					\
68*4882a593Smuzhiyun 		pr_err_ ## ratefunc("VFS: " fmt, ##__VA_ARGS__);	\
69*4882a593Smuzhiyun 	} else if ((type) & NOISY && (NOISY != 0)) {			\
70*4882a593Smuzhiyun 		pr_debug_ ## ratefunc(fmt, ##__VA_ARGS__);		\
71*4882a593Smuzhiyun 	}								\
72*4882a593Smuzhiyun } while (0)
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #define cifs_dbg(type, fmt, ...)					\
75*4882a593Smuzhiyun do {									\
76*4882a593Smuzhiyun 	if ((type) & ONCE)						\
77*4882a593Smuzhiyun 		cifs_dbg_func(once, type, fmt, ##__VA_ARGS__);		\
78*4882a593Smuzhiyun 	else								\
79*4882a593Smuzhiyun 		cifs_dbg_func(ratelimited, type, fmt, ##__VA_ARGS__);	\
80*4882a593Smuzhiyun } while (0)
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun #define cifs_server_dbg_func(ratefunc, type, fmt, ...)			\
83*4882a593Smuzhiyun do {									\
84*4882a593Smuzhiyun 	const char *sn = "";						\
85*4882a593Smuzhiyun 	if (server && server->hostname)					\
86*4882a593Smuzhiyun 		sn = server->hostname;					\
87*4882a593Smuzhiyun 	if ((type) & FYI && cifsFYI & CIFS_INFO) {			\
88*4882a593Smuzhiyun 		pr_debug_ ## ratefunc("%s: \\\\%s " fmt,		\
89*4882a593Smuzhiyun 				      __FILE__, sn, ##__VA_ARGS__);	\
90*4882a593Smuzhiyun 	} else if ((type) & VFS) {					\
91*4882a593Smuzhiyun 		pr_err_ ## ratefunc("VFS: \\\\%s " fmt,			\
92*4882a593Smuzhiyun 				    sn, ##__VA_ARGS__);			\
93*4882a593Smuzhiyun 	} else if ((type) & NOISY && (NOISY != 0)) {			\
94*4882a593Smuzhiyun 		pr_debug_ ## ratefunc("\\\\%s " fmt,			\
95*4882a593Smuzhiyun 				      sn, ##__VA_ARGS__);		\
96*4882a593Smuzhiyun 	}								\
97*4882a593Smuzhiyun } while (0)
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun #define cifs_server_dbg(type, fmt, ...)					\
100*4882a593Smuzhiyun do {									\
101*4882a593Smuzhiyun 	if ((type) & ONCE)						\
102*4882a593Smuzhiyun 		cifs_server_dbg_func(once, type, fmt, ##__VA_ARGS__);	\
103*4882a593Smuzhiyun 	else								\
104*4882a593Smuzhiyun 		cifs_server_dbg_func(ratelimited, type, fmt,		\
105*4882a593Smuzhiyun 				     ##__VA_ARGS__);			\
106*4882a593Smuzhiyun } while (0)
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun #define cifs_tcon_dbg_func(ratefunc, type, fmt, ...)			\
109*4882a593Smuzhiyun do {									\
110*4882a593Smuzhiyun 	const char *tn = "";						\
111*4882a593Smuzhiyun 	if (tcon && tcon->treeName)					\
112*4882a593Smuzhiyun 		tn = tcon->treeName;					\
113*4882a593Smuzhiyun 	if ((type) & FYI && cifsFYI & CIFS_INFO) {			\
114*4882a593Smuzhiyun 		pr_debug_ ## ratefunc("%s: %s "	fmt,			\
115*4882a593Smuzhiyun 				      __FILE__, tn, ##__VA_ARGS__);	\
116*4882a593Smuzhiyun 	} else if ((type) & VFS) {					\
117*4882a593Smuzhiyun 		pr_err_ ## ratefunc("VFS: %s " fmt, tn, ##__VA_ARGS__);	\
118*4882a593Smuzhiyun 	} else if ((type) & NOISY && (NOISY != 0)) {			\
119*4882a593Smuzhiyun 		pr_debug_ ## ratefunc("%s " fmt, tn, ##__VA_ARGS__);	\
120*4882a593Smuzhiyun 	}								\
121*4882a593Smuzhiyun } while (0)
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun #define cifs_tcon_dbg(type, fmt, ...)					\
124*4882a593Smuzhiyun do {									\
125*4882a593Smuzhiyun 	if ((type) & ONCE)						\
126*4882a593Smuzhiyun 		cifs_tcon_dbg_func(once, type, fmt, ##__VA_ARGS__);	\
127*4882a593Smuzhiyun 	else								\
128*4882a593Smuzhiyun 		cifs_tcon_dbg_func(ratelimited, type, fmt,		\
129*4882a593Smuzhiyun 				   ##__VA_ARGS__);			\
130*4882a593Smuzhiyun } while (0)
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun /*
133*4882a593Smuzhiyun  *	debug OFF
134*4882a593Smuzhiyun  *	---------
135*4882a593Smuzhiyun  */
136*4882a593Smuzhiyun #else		/* _CIFS_DEBUG */
137*4882a593Smuzhiyun #define cifs_dbg(type, fmt, ...)					\
138*4882a593Smuzhiyun do {									\
139*4882a593Smuzhiyun 	if (0)								\
140*4882a593Smuzhiyun 		pr_debug(fmt, ##__VA_ARGS__);				\
141*4882a593Smuzhiyun } while (0)
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun #define cifs_server_dbg(type, fmt, ...)					\
144*4882a593Smuzhiyun do {									\
145*4882a593Smuzhiyun 	if (0)								\
146*4882a593Smuzhiyun 		pr_debug("\\\\%s " fmt,					\
147*4882a593Smuzhiyun 			 server->hostname, ##__VA_ARGS__);		\
148*4882a593Smuzhiyun } while (0)
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #define cifs_tcon_dbg(type, fmt, ...)					\
151*4882a593Smuzhiyun do {									\
152*4882a593Smuzhiyun 	if (0)								\
153*4882a593Smuzhiyun 		pr_debug("%s " fmt, tcon->treeName, ##__VA_ARGS__);	\
154*4882a593Smuzhiyun } while (0)
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define cifs_info(fmt, ...)						\
157*4882a593Smuzhiyun 	pr_info(fmt, ##__VA_ARGS__)
158*4882a593Smuzhiyun #endif
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun #endif				/* _H_CIFS_DEBUG */
161