2019-05-27 08:55:05 +02:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2005-04-16 15:20:36 -07: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
void cifs_dump_mem ( char * label , void * data , int length ) ;
2018-04-22 14:45:53 -06:00
void cifs_dump_detail ( void * buf , struct TCP_Server_Info * ptcp_info ) ;
2006-05-31 22:40:51 +00:00
void cifs_dump_mids ( struct TCP_Server_Info * ) ;
2016-03-17 14:22:54 -07:00
extern bool traceSMB ; /* flag which enables the function below */
2012-03-23 14:28:02 -04:00
void dump_smb ( void * , int ) ;
2005-10-11 19:58:06 -07:00
# define CIFS_INFO 0x01
2010-10-07 18:46:32 +00:00
# define CIFS_RC 0x02
2005-10-11 19:58:06 -07:00
# define CIFS_TIMER 0x04
2005-04-16 15:20:36 -07:00
2013-05-04 22:12:25 -05:00
# define VFS 1
# define FYI 2
2012-12-05 12:42:47 -08:00
extern int cifsFYI ;
2013-05-04 22:12:25 -05:00
# ifdef CONFIG_CIFS_DEBUG2
# define NOISY 4
# else
# define NOISY 0
# endif
2018-04-10 17:01:13 +02:00
# define ONCE 8
2012-12-05 12:42:47 -08:00
2005-04-16 15:20:36 -07:00
/*
* debug ON
* - - - - - - - -
*/
2012-12-05 12:42:58 -08:00
# ifdef CONFIG_CIFS_DEBUG
2005-04-16 15:20:36 -07:00
2018-10-07 13:52:18 -05: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 12:21:25 -03:00
/* Information level messages, minor events */
# define cifs_info_func(ratefunc, fmt, ...) \
do { \
pr_info_ # # ratefunc ( " CIFS: " fmt , # # __VA_ARGS__ ) ; \
} while ( 0 )
# define cifs_info(fmt, ...) \
do { \
cifs_info_func ( ratelimited , fmt , # # __VA_ARGS__ ) ; \
} while ( 0 )
2013-05-04 22:12:25 -05:00
/* information message: e.g., configuration, major event */
2018-04-10 17:01:13 +02: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 ) { \
2018-04-19 10:44:20 +02:00
pr_err_ # # ratefunc ( " CIFS VFS: " \
2018-04-10 17:01:13 +02:00
fmt , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & NOISY & & ( NOISY ! = 0 ) ) { \
pr_debug_ # # ratefunc ( fmt , # # __VA_ARGS__ ) ; \
} \
} while ( 0 )
# 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 03:50:45 +00:00
} while ( 0 )
2005-04-16 15:20:36 -07:00
2019-08-28 17:15:35 +10:00
# define cifs_server_dbg_func(ratefunc, type, fmt, ...) \
do { \
2019-09-04 12:32:41 +10:00
const char * sn = " " ; \
if ( server & & server - > hostname ) \
sn = server - > hostname ; \
2019-08-28 17:15:35 +10:00
if ( ( type ) & FYI & & cifsFYI & CIFS_INFO ) { \
2019-09-04 12:32:41 +10:00
pr_debug_ # # ratefunc ( " %s: \\ \\ %s " fmt , \
__FILE__ , sn , # # __VA_ARGS__ ) ; \
2019-08-28 17:15:35 +10:00
} else if ( ( type ) & VFS ) { \
2019-09-04 12:32:41 +10:00
pr_err_ # # ratefunc ( " CIFS VFS: \\ \\ %s " fmt , \
sn , # # __VA_ARGS__ ) ; \
2019-08-28 17:15:35 +10:00
} else if ( ( type ) & NOISY & & ( NOISY ! = 0 ) ) { \
2019-09-04 12:32:41 +10:00
pr_debug_ # # ratefunc ( " \\ \\ %s " fmt , \
sn , # # __VA_ARGS__ ) ; \
2019-08-28 17:15:35 +10:00
} \
} while ( 0 )
# 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__ ) ; \
} while ( 0 )
2019-09-04 12:32:41 +10: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 ( " CIFS VFS: %s " fmt , \
tn , # # __VA_ARGS__ ) ; \
} else if ( ( type ) & NOISY & & ( NOISY ! = 0 ) ) { \
pr_debug_ # # ratefunc ( " %s " fmt , \
tn , # # __VA_ARGS__ ) ; \
} \
} while ( 0 )
# 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__ ) ; \
} while ( 0 )
2005-04-16 15:20:36 -07:00
/*
* debug OFF
* - - - - - - - - -
*/
# else /* _CIFS_DEBUG */
2013-05-04 22:12:25 -05:00
# define cifs_dbg(type, fmt, ...) \
2012-12-05 12:42:47 -08:00
do { \
if ( 0 ) \
2014-08-27 16:49:44 +03:00
pr_debug ( fmt , # # __VA_ARGS__ ) ; \
2012-12-05 12:42:47 -08:00
} while ( 0 )
2018-10-07 12:21:25 -03:00
2019-08-28 17:15:35 +10:00
# define cifs_server_dbg(type, fmt, ...) \
do { \
if ( 0 ) \
2019-09-04 12:32:41 +10:00
pr_debug ( " \\ \\ %s " fmt , \
2019-08-28 17:15:35 +10:00
server - > hostname , # # __VA_ARGS__ ) ; \
} while ( 0 )
2019-09-04 12:32:41 +10:00
# define cifs_tcon_dbg(type, fmt, ...) \
do { \
if ( 0 ) \
pr_debug ( " %s " fmt , tcon - > treeName , # # __VA_ARGS__ ) ; \
} while ( 0 )
2018-10-07 12:21:25 -03:00
# define cifs_info(fmt, ...) \
do { \
pr_info ( " CIFS: " fmt , # # __VA_ARGS__ ) ; \
} while ( 0 )
2013-05-04 22:12:25 -05:00
# endif
2005-04-16 15:20:36 -07:00
# endif /* _H_CIFS_DEBUG */