brintos

brintos / linux-shallow public Read only

0
0
Text · 4.3 KiB · ce5cfd2 Raw
161 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 *4 *   Copyright (c) International Business Machines  Corp., 2000,20025 *   Modified by Steve French (sfrench@us.ibm.com)6 */7 8#ifndef _H_CIFS_DEBUG9#define _H_CIFS_DEBUG10 11#ifdef pr_fmt12#undef pr_fmt13#endif14 15#define pr_fmt(fmt) "CIFS: " fmt16 17void cifs_dump_mem(char *label, void *data, int length);18void cifs_dump_detail(void *buf, struct TCP_Server_Info *ptcp_info);19void cifs_dump_mids(struct TCP_Server_Info *);20extern bool traceSMB;		/* flag which enables the function below */21void dump_smb(void *, int);22#define CIFS_INFO	0x0123#define CIFS_RC		0x0224#define CIFS_TIMER	0x0425 26#define VFS 127#define FYI 228extern int cifsFYI;29#ifdef CONFIG_CIFS_DEBUG230#define NOISY 431#else32#define NOISY 033#endif34#define ONCE 835 36/*37 *	debug ON38 *	--------39 */40#ifdef CONFIG_CIFS_DEBUG41 42 43/*44 * When adding tracepoints and debug messages we have various choices.45 * Some considerations:46 *47 * Use cifs_dbg(VFS, ...) for things we always want logged, and the user to see48 *     cifs_info(...) slightly less important, admin can filter via loglevel > 649 *     cifs_dbg(FYI, ...) minor debugging messages, off by default50 *     trace_smb3_*  ftrace functions are preferred for complex debug messages51 *                 intended for developers or experienced admins, off by default52 */53 54/* Information level messages, minor events */55#define cifs_info_func(ratefunc, fmt, ...)				\56	pr_info_ ## ratefunc(fmt, ##__VA_ARGS__)57 58#define cifs_info(fmt, ...)						\59	cifs_info_func(ratelimited, fmt, ##__VA_ARGS__)60 61/* information message: e.g., configuration, major event */62#define cifs_dbg_func(ratefunc, type, fmt, ...)				\63do {									\64	if ((type) & FYI && cifsFYI & CIFS_INFO) {			\65		pr_debug_ ## ratefunc("%s: " fmt,			\66				      __FILE__, ##__VA_ARGS__);		\67	} else if ((type) & VFS) {					\68		pr_err_ ## ratefunc("VFS: " fmt, ##__VA_ARGS__);	\69	} else if ((type) & NOISY && (NOISY != 0)) {			\70		pr_debug_ ## ratefunc(fmt, ##__VA_ARGS__);		\71	}								\72} while (0)73 74#define cifs_dbg(type, fmt, ...)					\75do {									\76	if ((type) & ONCE)						\77		cifs_dbg_func(once, type, fmt, ##__VA_ARGS__);		\78	else								\79		cifs_dbg_func(ratelimited, type, fmt, ##__VA_ARGS__);	\80} while (0)81 82#define cifs_server_dbg_func(ratefunc, type, fmt, ...)			\83do {									\84	spin_lock(&server->srv_lock);					\85	if ((type) & FYI && cifsFYI & CIFS_INFO) {			\86		pr_debug_ ## ratefunc("%s: \\\\%s " fmt,		\87				      __FILE__, server->hostname,	\88				      ##__VA_ARGS__);			\89	} else if ((type) & VFS) {					\90		pr_err_ ## ratefunc("VFS: \\\\%s " fmt,			\91				    server->hostname, ##__VA_ARGS__);	\92	} else if ((type) & NOISY && (NOISY != 0)) {			\93		pr_debug_ ## ratefunc("\\\\%s " fmt,			\94				      server->hostname, ##__VA_ARGS__);	\95	}								\96	spin_unlock(&server->srv_lock);					\97} while (0)98 99#define cifs_server_dbg(type, fmt, ...)					\100do {									\101	if ((type) & ONCE)						\102		cifs_server_dbg_func(once, type, fmt, ##__VA_ARGS__);	\103	else								\104		cifs_server_dbg_func(ratelimited, type, fmt,		\105				     ##__VA_ARGS__);			\106} while (0)107 108#define cifs_tcon_dbg_func(ratefunc, type, fmt, ...)			\109do {									\110	const char *tn = "";						\111	if (tcon && tcon->tree_name)					\112		tn = tcon->tree_name;					\113	if ((type) & FYI && cifsFYI & CIFS_INFO) {			\114		pr_debug_ ## ratefunc("%s: %s "	fmt,			\115				      __FILE__, tn, ##__VA_ARGS__);	\116	} else if ((type) & VFS) {					\117		pr_err_ ## ratefunc("VFS: %s " fmt, tn, ##__VA_ARGS__);	\118	} else if ((type) & NOISY && (NOISY != 0)) {			\119		pr_debug_ ## ratefunc("%s " fmt, tn, ##__VA_ARGS__);	\120	}								\121} while (0)122 123#define cifs_tcon_dbg(type, fmt, ...)					\124do {									\125	if ((type) & ONCE)						\126		cifs_tcon_dbg_func(once, type, fmt, ##__VA_ARGS__);	\127	else								\128		cifs_tcon_dbg_func(ratelimited, type, fmt,		\129				   ##__VA_ARGS__);			\130} while (0)131 132/*133 *	debug OFF134 *	---------135 */136#else		/* _CIFS_DEBUG */137#define cifs_dbg(type, fmt, ...)					\138do {									\139	if (0)								\140		pr_debug(fmt, ##__VA_ARGS__);				\141} while (0)142 143#define cifs_server_dbg(type, fmt, ...)					\144do {									\145	if (0)								\146		pr_debug("\\\\%s " fmt,					\147			 server->hostname, ##__VA_ARGS__);		\148} while (0)149 150#define cifs_tcon_dbg(type, fmt, ...)					\151do {									\152	if (0)								\153		pr_debug("%s " fmt, tcon->tree_name, ##__VA_ARGS__);	\154} while (0)155 156#define cifs_info(fmt, ...)						\157	pr_info(fmt, ##__VA_ARGS__)158#endif159 160#endif				/* _H_CIFS_DEBUG */161