2019-05-27 09:55:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-17 02:20:36 +04:00
/*
*
* Copyright ( c ) International Business Machines Corp . , 2000 , 2002
* Modified by Steve French ( sfrench @ us . ibm . com )
*/
# ifndef _H_CIFS_DEBUG
# define _H_CIFS_DEBUG
2020-04-15 08:42:53 +03:00
# ifdef pr_fmt
# undef pr_fmt
# endif
# define pr_fmt(fmt) "CIFS: " fmt
2005-04-17 02:20:36 +04:00
void cifs_dump_mem ( char * label , void * data , int length ) ;
2018-04-22 23:45:53 +03:00
void cifs_dump_detail ( void * buf , struct TCP_Server_Info * ptcp_info ) ;
2006-06-01 02:40:51 +04:00
void cifs_dump_mids ( struct TCP_Server_Info * ) ;
2016-03-18 00:22:54 +03:00
extern bool traceSMB ; /* flag which enables the function below */
2012-03-23 22:28:02 +04:00
void dump_smb ( void * , int ) ;
2005-10-12 06:58:06 +04:00
# define CIFS_INFO 0x01
2010-10-07 22:46:32 +04:00
# define CIFS_RC 0x02
2005-10-12 06:58:06 +04:00
# define CIFS_TIMER 0x04
2005-04-17 02:20:36 +04:00
2013-05-05 07:12:25 +04:00
# define VFS 1
# define FYI 2
2012-12-06 00:42:47 +04:00
extern int cifsFYI ;
2013-05-05 07:12:25 +04:00
# ifdef CONFIG_CIFS_DEBUG2
# define NOISY 4
# else
# define NOISY 0
# endif
2018-04-10 18:01:13 +03:00
# define ONCE 8
2012-12-06 00:42:47 +04:00
2005-04-17 02:20:36 +04:00
/*
* debug ON
* - - - - - - - -
*/
2012-12-06 00:42:58 +04:00
# ifdef CONFIG_CIFS_DEBUG
2005-04-17 02:20:36 +04:00
2018-10-07 21:52:18 +03:00
/*
* When adding tracepoints and debug messages we have various choices .
* Some considerations :
*
* Use cifs_dbg ( VFS , . . . ) for things we always want logged , and the user to see
* cifs_info ( . . . ) slightly less important , admin can filter via loglevel > 6
* cifs_dbg ( FYI , . . . ) minor debugging messages , off by default
* trace_smb3_ * ftrace functions are preferred for complex debug messages
* intended for developers or experienced admins , off by default
*/
2018-10-07 18:21:25 +03:00
/* Information level messages, minor events */
2020-04-15 08:42:53 +03:00
# define cifs_info_func(ratefunc, fmt, ...) \
pr_info_ # # ratefunc ( fmt , # # __VA_ARGS__ )
2018-10-07 18:21:25 +03:00
2020-04-15 08:42:53 +03:00
# define cifs_info(fmt, ...) \
cifs_info_func ( ratelimited , fmt , # # __VA_ARGS__ )
2018-10-07 18:21:25 +03:00
2013-05-05 07:12:25 +04:00
/* information message: e.g., configuration, major event */
2020-04-15 08:42:53 +03:00
# define cifs_dbg_func(ratefunc, type, fmt, ...) \
do { \
if ( ( type ) & FYI & & cifsFYI & CIFS_INFO ) { \
pr_debug_ # # ratefunc ( " %s: " fmt , \
__FILE__ , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & VFS ) { \
pr_err_ # # ratefunc ( " VFS: " fmt , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & NOISY & & ( NOISY ! = 0 ) ) { \
pr_debug_ # # ratefunc ( fmt , # # __VA_ARGS__ ) ; \
} \
2018-04-10 18:01:13 +03:00
} while ( 0 )
2020-04-15 08:42:53 +03:00
# define cifs_dbg(type, fmt, ...) \
do { \
if ( ( type ) & ONCE ) \
cifs_dbg_func ( once , type , fmt , # # __VA_ARGS__ ) ; \
else \
cifs_dbg_func ( ratelimited , type , fmt , # # __VA_ARGS__ ) ; \
2010-04-21 07:50:45 +04:00
} while ( 0 )
2005-04-17 02:20:36 +04:00
2020-04-15 08:42:53 +03:00
# define cifs_server_dbg_func(ratefunc, type, fmt, ...) \
do { \
const char * sn = " " ; \
if ( server & & server - > hostname ) \
sn = server - > hostname ; \
if ( ( type ) & FYI & & cifsFYI & CIFS_INFO ) { \
pr_debug_ # # ratefunc ( " %s: \\ \\ %s " fmt , \
__FILE__ , sn , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & VFS ) { \
pr_err_ # # ratefunc ( " VFS: \\ \\ %s " fmt , \
sn , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & NOISY & & ( NOISY ! = 0 ) ) { \
pr_debug_ # # ratefunc ( " \\ \\ %s " fmt , \
sn , # # __VA_ARGS__ ) ; \
} \
2019-08-28 10:15:35 +03:00
} while ( 0 )
2020-04-15 08:42:53 +03:00
# define cifs_server_dbg(type, fmt, ...) \
do { \
if ( ( type ) & ONCE ) \
cifs_server_dbg_func ( once , type , fmt , # # __VA_ARGS__ ) ; \
else \
cifs_server_dbg_func ( ratelimited , type , fmt , \
# #__VA_ARGS__); \
2019-08-28 10:15:35 +03:00
} while ( 0 )
2020-04-15 08:42:53 +03:00
# define cifs_tcon_dbg_func(ratefunc, type, fmt, ...) \
do { \
const char * tn = " " ; \
if ( tcon & & tcon - > treeName ) \
tn = tcon - > treeName ; \
if ( ( type ) & FYI & & cifsFYI & CIFS_INFO ) { \
pr_debug_ # # ratefunc ( " %s: %s " fmt , \
__FILE__ , tn , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & VFS ) { \
pr_err_ # # ratefunc ( " VFS: %s " fmt , tn , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & NOISY & & ( NOISY ! = 0 ) ) { \
pr_debug_ # # ratefunc ( " %s " fmt , tn , # # __VA_ARGS__ ) ; \
} \
2019-09-04 05:32:41 +03:00
} while ( 0 )
2020-04-15 08:42:53 +03:00
# define cifs_tcon_dbg(type, fmt, ...) \
do { \
if ( ( type ) & ONCE ) \
cifs_tcon_dbg_func ( once , type , fmt , # # __VA_ARGS__ ) ; \
else \
cifs_tcon_dbg_func ( ratelimited , type , fmt , \
# #__VA_ARGS__); \
2019-09-04 05:32:41 +03:00
} while ( 0 )
2005-04-17 02:20:36 +04:00
/*
* debug OFF
* - - - - - - - - -
*/
# else /* _CIFS_DEBUG */
2013-05-05 07:12:25 +04:00
# define cifs_dbg(type, fmt, ...) \
2012-12-06 00:42:47 +04:00
do { \
if ( 0 ) \
2014-08-27 17:49:44 +04:00
pr_debug ( fmt , # # __VA_ARGS__ ) ; \
2012-12-06 00:42:47 +04:00
} while ( 0 )
2018-10-07 18:21:25 +03:00
2019-08-28 10:15:35 +03:00
# define cifs_server_dbg(type, fmt, ...) \
do { \
if ( 0 ) \
2019-09-04 05:32:41 +03:00
pr_debug ( " \\ \\ %s " fmt , \
2019-08-28 10:15:35 +03:00
server - > hostname , # # __VA_ARGS__ ) ; \
} while ( 0 )
2019-09-04 05:32:41 +03:00
# define cifs_tcon_dbg(type, fmt, ...) \
do { \
if ( 0 ) \
pr_debug ( " %s " fmt , tcon - > treeName , # # __VA_ARGS__ ) ; \
} while ( 0 )
2018-10-07 18:21:25 +03:00
# define cifs_info(fmt, ...) \
2020-04-15 08:42:53 +03:00
pr_info ( fmt , # # __VA_ARGS__ )
2013-05-05 07:12:25 +04:00
# endif
2005-04-17 02:20:36 +04:00
# endif /* _H_CIFS_DEBUG */