at v5.1 114 lines 3.2 kB view raw
1/* 2 * 3 * Copyright (c) International Business Machines Corp., 2000,2002 4 * Modified by Steve French (sfrench@us.ibm.com) 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14 * the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * 20*/ 21 22#ifndef _H_CIFS_DEBUG 23#define _H_CIFS_DEBUG 24 25void cifs_dump_mem(char *label, void *data, int length); 26void cifs_dump_detail(void *buf, struct TCP_Server_Info *ptcp_info); 27void cifs_dump_mids(struct TCP_Server_Info *); 28extern bool traceSMB; /* flag which enables the function below */ 29void dump_smb(void *, int); 30#define CIFS_INFO 0x01 31#define CIFS_RC 0x02 32#define CIFS_TIMER 0x04 33 34#define VFS 1 35#define FYI 2 36extern int cifsFYI; 37#ifdef CONFIG_CIFS_DEBUG2 38#define NOISY 4 39#else 40#define NOISY 0 41#endif 42#define ONCE 8 43 44/* 45 * debug ON 46 * -------- 47 */ 48#ifdef CONFIG_CIFS_DEBUG 49 50 51/* 52 * When adding tracepoints and debug messages we have various choices. 53 * Some considerations: 54 * 55 * Use cifs_dbg(VFS, ...) for things we always want logged, and the user to see 56 * cifs_info(...) slightly less important, admin can filter via loglevel > 6 57 * cifs_dbg(FYI, ...) minor debugging messages, off by default 58 * trace_smb3_* ftrace functions are preferred for complex debug messages 59 * intended for developers or experienced admins, off by default 60 */ 61 62/* Information level messages, minor events */ 63#define cifs_info_func(ratefunc, fmt, ...) \ 64do { \ 65 pr_info_ ## ratefunc("CIFS: " fmt, ##__VA_ARGS__); \ 66} while (0) 67 68#define cifs_info(fmt, ...) \ 69do { \ 70 cifs_info_func(ratelimited, fmt, ##__VA_ARGS__); \ 71} while (0) 72 73/* information message: e.g., configuration, major event */ 74#define cifs_dbg_func(ratefunc, type, fmt, ...) \ 75do { \ 76 if ((type) & FYI && cifsFYI & CIFS_INFO) { \ 77 pr_debug_ ## ratefunc("%s: " \ 78 fmt, __FILE__, ##__VA_ARGS__); \ 79 } else if ((type) & VFS) { \ 80 pr_err_ ## ratefunc("CIFS VFS: " \ 81 fmt, ##__VA_ARGS__); \ 82 } else if ((type) & NOISY && (NOISY != 0)) { \ 83 pr_debug_ ## ratefunc(fmt, ##__VA_ARGS__); \ 84 } \ 85} while (0) 86 87#define cifs_dbg(type, fmt, ...) \ 88do { \ 89 if ((type) & ONCE) \ 90 cifs_dbg_func(once, \ 91 type, fmt, ##__VA_ARGS__); \ 92 else \ 93 cifs_dbg_func(ratelimited, \ 94 type, fmt, ##__VA_ARGS__); \ 95} while (0) 96 97/* 98 * debug OFF 99 * --------- 100 */ 101#else /* _CIFS_DEBUG */ 102#define cifs_dbg(type, fmt, ...) \ 103do { \ 104 if (0) \ 105 pr_debug(fmt, ##__VA_ARGS__); \ 106} while (0) 107 108#define cifs_info(fmt, ...) \ 109do { \ 110 pr_info("CIFS: "fmt, ##__VA_ARGS__); \ 111} while (0) 112#endif 113 114#endif /* _H_CIFS_DEBUG */