root/fs/cifs/cifs_debug.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 #define cifs_server_dbg_func(ratefunc, type, fmt, ...)          \
  84 do {                                                            \
  85         const char *sn = "";                                    \
  86         if (server && server->hostname)                         \
  87                 sn = server->hostname;                          \
  88         if ((type) & FYI && cifsFYI & CIFS_INFO) {              \
  89                 pr_debug_ ## ratefunc("%s: \\\\%s "     fmt,    \
  90                         __FILE__, sn, ##__VA_ARGS__);           \
  91         } else if ((type) & VFS) {                              \
  92                 pr_err_ ## ratefunc("CIFS VFS: \\\\%s " fmt,    \
  93                         sn, ##__VA_ARGS__);                     \
  94         } else if ((type) & NOISY && (NOISY != 0)) {            \
  95                 pr_debug_ ## ratefunc("\\\\%s " fmt,            \
  96                         sn, ##__VA_ARGS__);                     \
  97         }                                                       \
  98 } while (0)
  99 
 100 #define cifs_server_dbg(type, fmt, ...)                 \
 101 do {                                                    \
 102         if ((type) & ONCE)                              \
 103                 cifs_server_dbg_func(once,              \
 104                         type, fmt, ##__VA_ARGS__);      \
 105         else                                            \
 106                 cifs_server_dbg_func(ratelimited,       \
 107                         type, fmt, ##__VA_ARGS__);      \
 108 } while (0)
 109 
 110 #define cifs_tcon_dbg_func(ratefunc, type, fmt, ...)            \
 111 do {                                                            \
 112         const char *tn = "";                                    \
 113         if (tcon && tcon->treeName)                             \
 114                 tn = tcon->treeName;                            \
 115         if ((type) & FYI && cifsFYI & CIFS_INFO) {              \
 116                 pr_debug_ ## ratefunc("%s: %s " fmt,            \
 117                         __FILE__, tn, ##__VA_ARGS__);           \
 118         } else if ((type) & VFS) {                              \
 119                 pr_err_ ## ratefunc("CIFS VFS: %s " fmt,        \
 120                         tn, ##__VA_ARGS__);                     \
 121         } else if ((type) & NOISY && (NOISY != 0)) {            \
 122                 pr_debug_ ## ratefunc("%s " fmt,                \
 123                         tn, ##__VA_ARGS__);                     \
 124         }                                                       \
 125 } while (0)
 126 
 127 #define cifs_tcon_dbg(type, fmt, ...)                   \
 128 do {                                                    \
 129         if ((type) & ONCE)                              \
 130                 cifs_tcon_dbg_func(once,                \
 131                         type, fmt, ##__VA_ARGS__);      \
 132         else                                            \
 133                 cifs_tcon_dbg_func(ratelimited, \
 134                         type, fmt, ##__VA_ARGS__);      \
 135 } while (0)
 136 
 137 /*
 138  *      debug OFF
 139  *      ---------
 140  */
 141 #else           /* _CIFS_DEBUG */
 142 #define cifs_dbg(type, fmt, ...)                                        \
 143 do {                                                                    \
 144         if (0)                                                          \
 145                 pr_debug(fmt, ##__VA_ARGS__);                           \
 146 } while (0)
 147 
 148 #define cifs_server_dbg(type, fmt, ...)                                 \
 149 do {                                                                    \
 150         if (0)                                                          \
 151                 pr_debug("\\\\%s " fmt,                                 \
 152                          server->hostname, ##__VA_ARGS__);              \
 153 } while (0)
 154 
 155 #define cifs_tcon_dbg(type, fmt, ...)                                   \
 156 do {                                                                    \
 157         if (0)                                                          \
 158                 pr_debug("%s " fmt, tcon->treeName, ##__VA_ARGS__);     \
 159 } while (0)
 160 
 161 #define cifs_info(fmt, ...)                                             \
 162 do {                                                                    \
 163         pr_info("CIFS: "fmt, ##__VA_ARGS__);                            \
 164 } while (0)
 165 #endif
 166 
 167 #endif                          /* _H_CIFS_DEBUG */

/* [<][>][^][v][top][bottom][index][help] */