@@ -44,7 +44,8 @@
/* libcfs_string.c */
/* Convert a text string to a bitmask */
int cfs_str2mask(const char *str, const char *(*bit2str)(int bit),
- int *oldmask, int minmask, int allmask);
+ int *oldmask, int minmask, int allmask, int defmask);
+
/* trim leading and trailing space characters */
char *cfs_firststr(char *str, size_t size);
@@ -62,38 +62,41 @@ struct ptldebug_header {
#define PH_FLAG_FIRST_RECORD 1
/* Debugging subsystems (32 bits, non-overlapping) */
-#define S_UNDEFINED 0x00000001
-#define S_MDC 0x00000002
-#define S_MDS 0x00000004
-#define S_OSC 0x00000008
-#define S_OST 0x00000010
-#define S_CLASS 0x00000020
-#define S_LOG 0x00000040
-#define S_LLITE 0x00000080
-#define S_RPC 0x00000100
-#define S_MGMT 0x00000200
-#define S_LNET 0x00000400
-#define S_LND 0x00000800 /* ALL LNDs */
-#define S_PINGER 0x00001000
-#define S_FILTER 0x00002000
-#define S_LIBCFS 0x00004000
-#define S_ECHO 0x00008000
-#define S_LDLM 0x00010000
-#define S_LOV 0x00020000
-#define S_LQUOTA 0x00040000
-#define S_OSD 0x00080000
-#define S_LFSCK 0x00100000
-#define S_SNAPSHOT 0x00200000
+enum libcfs_debug_subsys {
+ S_UNDEFINED = 0x00000001,
+ S_MDC = 0x00000002,
+ S_MDS = 0x00000004,
+ S_OSC = 0x00000008,
+ S_OST = 0x00000010,
+ S_CLASS = 0x00000020,
+ S_LOG = 0x00000040,
+ S_LLITE = 0x00000080,
+ S_RPC = 0x00000100,
+ S_MGMT = 0x00000200,
+ S_LNET = 0x00000400,
+ S_LND = 0x00000800, /* ALL LNDs */
+ S_PINGER = 0x00001000,
+ S_FILTER = 0x00002000,
+ S_LIBCFS = 0x00004000,
+ S_ECHO = 0x00008000,
+ S_LDLM = 0x00010000,
+ S_LOV = 0x00020000,
+ S_LQUOTA = 0x00040000,
+ S_OSD = 0x00080000,
+ S_LFSCK = 0x00100000,
+ S_SNAPSHOT = 0x00200000,
/* unused */
-#define S_LMV 0x00800000 /* b_new_cmd */
+ S_LMV = 0x00800000,
/* unused */
-#define S_SEC 0x02000000 /* upcall cache */
-#define S_GSS 0x04000000 /* b_new_cmd */
+ S_SEC = 0x02000000, /* upcall cache */
+ S_GSS = 0x04000000,
/* unused */
-#define S_MGC 0x10000000
-#define S_MGS 0x20000000
-#define S_FID 0x40000000 /* b_new_cmd */
-#define S_FLD 0x80000000 /* b_new_cmd */
+ S_MGC = 0x10000000,
+ S_MGS = 0x20000000,
+ S_FID = 0x40000000,
+ S_FLD = 0x80000000,
+};
+#define LIBCFS_S_DEFAULT (~0)
#define LIBCFS_DEBUG_SUBSYS_NAMES { \
"undefined", "mdc", "mds", "osc", "ost", "class", "log", \
@@ -103,38 +106,42 @@ struct ptldebug_header {
"fid", "fld", NULL }
/* Debugging masks (32 bits, non-overlapping) */
-#define D_TRACE 0x00000001 /* ENTRY/EXIT markers */
-#define D_INODE 0x00000002
-#define D_SUPER 0x00000004
-#define D_IOTRACE 0x00000008 /* simple, low overhead io tracing */
-#define D_MALLOC 0x00000010 /* print malloc, free information */
-#define D_CACHE 0x00000020 /* cache-related items */
-#define D_INFO 0x00000040 /* general information */
-#define D_IOCTL 0x00000080 /* ioctl related information */
-#define D_NETERROR 0x00000100 /* network errors */
-#define D_NET 0x00000200 /* network communications */
-#define D_WARNING 0x00000400 /* CWARN(...) == CDEBUG (D_WARNING, ...) */
-#define D_BUFFS 0x00000800
-#define D_OTHER 0x00001000
-#define D_DENTRY 0x00002000
-#define D_NETTRACE 0x00004000
-#define D_PAGE 0x00008000 /* bulk page handling */
-#define D_DLMTRACE 0x00010000
-#define D_ERROR 0x00020000 /* CERROR(...) == CDEBUG (D_ERROR, ...) */
-#define D_EMERG 0x00040000 /* CEMERG(...) == CDEBUG (D_EMERG, ...) */
-#define D_HA 0x00080000 /* recovery and failover */
-#define D_RPCTRACE 0x00100000 /* for distributed debugging */
-#define D_VFSTRACE 0x00200000
-#define D_READA 0x00400000 /* read-ahead */
-#define D_MMAP 0x00800000
-#define D_CONFIG 0x01000000
-#define D_CONSOLE 0x02000000
-#define D_QUOTA 0x04000000
-#define D_SEC 0x08000000
-#define D_LFSCK 0x10000000 /* For both OI scrub and LFSCK */
-#define D_HSM 0x20000000
-#define D_SNAPSHOT 0x40000000 /* snapshot */
-#define D_LAYOUT 0x80000000
+enum libcfs_debug_masks {
+ D_TRACE = 0x00000001, /* ENTRY/EXIT markers */
+ D_INODE = 0x00000002,
+ D_SUPER = 0x00000004,
+ D_IOTRACE = 0x00000008, /* simple, low overhead io tracing */
+ D_MALLOC = 0x00000010, /* print malloc, free information */
+ D_CACHE = 0x00000020, /* cache-related items */
+ D_INFO = 0x00000040, /* general information */
+ D_IOCTL = 0x00000080, /* ioctl related information */
+ D_NETERROR = 0x00000100, /* network errors */
+ D_NET = 0x00000200, /* network communications */
+ D_WARNING = 0x00000400, /* CWARN(...) == CDEBUG(D_WARNING, ...) */
+ D_BUFFS = 0x00000800,
+ D_OTHER = 0x00001000,
+ D_DENTRY = 0x00002000,
+ D_NETTRACE = 0x00004000,
+ D_PAGE = 0x00008000, /* bulk page handling */
+ D_DLMTRACE = 0x00010000,
+ D_ERROR = 0x00020000, /* CERROR(...) == CDEBUG(D_ERROR, ...) */
+ D_EMERG = 0x00040000, /* CEMERG(...) == CDEBUG(D_EMERG, ...) */
+ D_HA = 0x00080000, /* recovery and failover */
+ D_RPCTRACE = 0x00100000, /* for distributed debugging */
+ D_VFSTRACE = 0x00200000,
+ D_READA = 0x00400000, /* read-ahead */
+ D_MMAP = 0x00800000,
+ D_CONFIG = 0x01000000,
+ D_CONSOLE = 0x02000000,
+ D_QUOTA = 0x04000000,
+ D_SEC = 0x08000000,
+ D_LFSCK = 0x10000000, /* For both OI scrub and LFSCK */
+ D_HSM = 0x20000000,
+ D_SNAPSHOT = 0x40000000,
+ D_LAYOUT = 0x80000000,
+};
+#define LIBCFS_D_DEFAULT (D_CANTMASK | D_NETERROR | D_HA | D_CONFIG | D_IOCTL |\
+ D_LFSCK)
#define LIBCFS_DEBUG_MASKS_NAMES { \
"trace", "inode", "super", "iotrace", "malloc", "cache", "info",\
@@ -47,13 +47,12 @@
static char debug_file_name[1024];
-unsigned int libcfs_subsystem_debug = ~0;
+unsigned int libcfs_subsystem_debug = LIBCFS_S_DEFAULT;
EXPORT_SYMBOL(libcfs_subsystem_debug);
module_param(libcfs_subsystem_debug, int, 0644);
MODULE_PARM_DESC(libcfs_subsystem_debug, "Lustre kernel debug subsystem mask");
-unsigned int libcfs_debug = (D_CANTMASK |
- D_NETERROR | D_HA | D_CONFIG | D_IOCTL);
+unsigned int libcfs_debug = LIBCFS_D_DEFAULT;
EXPORT_SYMBOL(libcfs_debug);
module_param(libcfs_debug, int, 0644);
MODULE_PARM_DESC(libcfs_debug, "Lustre kernel debug mask");
@@ -236,7 +235,7 @@ static int param_set_uintpos(const char *val, const struct kernel_param *kp)
/* libcfs_debug_token2mask() expects the returned string in lower-case */
static const char *libcfs_debug_subsys2str(int subsys)
{
- static const char * const libcfs_debug_subsystems[] =
+ static const char *const libcfs_debug_subsystems[] =
LIBCFS_DEBUG_SUBSYS_NAMES;
if (subsys >= ARRAY_SIZE(libcfs_debug_subsystems))
@@ -328,8 +327,8 @@ static const char *libcfs_debug_dbg2str(int debug)
return 0;
}
- return cfs_str2mask(str, fn, mask, is_subsys ? 0 : D_CANTMASK,
- 0xffffffff);
+ return cfs_str2mask(str, fn, mask, is_subsys ? 0 : D_CANTMASK, ~0,
+ is_subsys ? LIBCFS_S_DEFAULT : LIBCFS_D_DEFAULT);
}
char lnet_debug_log_upcall[1024] = "/usr/lib/lustre/lnet_debug_log_upcall";
@@ -46,7 +46,7 @@
/* Convert a text string to a bitmask */
int cfs_str2mask(const char *str, const char *(*bit2str)(int bit),
- int *oldmask, int minmask, int allmask)
+ int *oldmask, int minmask, int allmask, int defmask)
{
const char *debugstr;
char op = '\0';
@@ -102,6 +102,15 @@ int cfs_str2mask(const char *str, const char *(*bit2str)(int bit),
newmask = allmask;
found = 1;
}
+ if (!found && strcasecmp(str, "DEFAULT") == 0) {
+ if (op == '-')
+ newmask = (newmask & ~defmask) | minmask;
+ else if (op == '+')
+ newmask |= defmask;
+ else
+ newmask = defmask;
+ found = 1;
+ }
if (!found) {
CWARN("unknown mask '%.*s'.\n"
"mask usage: [+|-]<all|type> ...\n", len, str);