X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Flibcfs%2Fdebug.c;h=4c950c88731ed03daf7c14d3f343ff60dea94f5f;hb=215bce0fda8432560faca8daa6a33ea773640099;hp=f1ccfc5e6611df1e0ff2cf0626cfa290adb56d46;hpb=421d7a675265d697a1a9308aa9dac8030eab497a;p=fs%2Flustre-release.git diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c index f1ccfc5..4c950c8 100644 --- a/libcfs/libcfs/debug.c +++ b/libcfs/libcfs/debug.c @@ -16,8 +16,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or @@ -65,7 +65,7 @@ CFS_MODULE_PARM(libcfs_debug_mb, "i", int, 0644, "Total debug buffer size."); EXPORT_SYMBOL(libcfs_debug_mb); -unsigned int libcfs_printk = D_CANTMASK; +unsigned int libcfs_printk = (D_CANTMASK | D_NETERROR); CFS_MODULE_PARM(libcfs_printk, "i", uint, 0644, "Lustre kernel debug console mask"); EXPORT_SYMBOL(libcfs_printk); @@ -112,14 +112,11 @@ EXPORT_SYMBOL(libcfs_kmemory); static cfs_waitq_t debug_ctlwq; -#ifdef __arch_um__ -char debug_file_path[1024] = "/r/tmp/lustre-log"; -#else -char debug_file_path[1024] = "/tmp/lustre-log"; -#endif -char *debug_file_path_p = &debug_file_path[0]; +char debug_file_path_arr[1024] = DEBUG_FILE_PATH_DEFAULT; -CFS_MODULE_PARM(debug_file_path_p, "s", charp, 0644, +/* We need to pass a pointer here, but elsewhere this must be a const */ +static char *debug_file_path = &debug_file_path_arr[0]; +CFS_MODULE_PARM(debug_file_path, "s", charp, 0644, "Path for dumping debug logs, " "set 'NONE' to prevent log dumping"); @@ -130,7 +127,7 @@ int libcfs_panic_in_progress; const char * libcfs_debug_subsys2str(int subsys) { - switch (subsys) { + switch (1 << subsys) { default: return NULL; case S_UNDEFINED: @@ -165,6 +162,8 @@ libcfs_debug_subsys2str(int subsys) return "ldlm"; case S_LOV: return "lov"; + case S_LQUOTA: + return "lquota"; case S_LMV: return "lmv"; case S_SEC: @@ -187,7 +186,7 @@ libcfs_debug_subsys2str(int subsys) const char * libcfs_debug_dbg2str(int debug) { - switch (debug) { + switch (1 << debug) { default: return NULL; case D_TRACE: @@ -256,7 +255,6 @@ libcfs_debug_mask2str(char *str, int size, int mask, int is_subsys) libcfs_debug_dbg2str; int len = 0; const char *token; - int bit; int i; if (mask == 0) { /* "0" */ @@ -265,12 +263,10 @@ libcfs_debug_mask2str(char *str, int size, int mask, int is_subsys) len = 1; } else { /* space-separated tokens */ for (i = 0; i < 32; i++) { - bit = 1 << i; - - if ((mask & bit) == 0) + if ((mask & (1 << i)) == 0) continue; - token = fn(bit); + token = fn(i); if (token == NULL) /* unused bit */ continue; @@ -299,55 +295,11 @@ libcfs_debug_mask2str(char *str, int size, int mask, int is_subsys) } int -libcfs_debug_token2mask(int *mask, const char *str, int len, int is_subsys) +libcfs_debug_str2mask(int *mask, const char *str, int is_subsys) { const char *(*fn)(int bit) = is_subsys ? libcfs_debug_subsys2str : libcfs_debug_dbg2str; - int i; - int j; - int bit; - const char *token; - - /* match against known tokens */ - for (i = 0; i < 32; i++) { - bit = 1 << i; - - token = fn(bit); - if (token == NULL) /* unused? */ - continue; - - /* strcasecmp */ - for (j = 0; ; j++) { - if (j == len) { /* end of token */ - if (token[j] == 0) { - *mask = bit; - return 0; - } - break; - } - - if (token[j] == 0) - break; - - if (str[j] == token[j]) - continue; - - if (str[j] < 'A' || 'Z' < str[j]) - break; - - if (str[j] - 'A' + 'a' != token[j]) - break; - } - } - - return -EINVAL; /* no match */ -} - -int -libcfs_debug_str2mask(int *mask, const char *str, int is_subsys) -{ int m = 0; - char op = 0; int matched; int n; int t; @@ -365,70 +317,27 @@ libcfs_debug_str2mask(int *mask, const char *str, int is_subsys) return 0; } - /* must be a list of debug tokens or numbers separated by - * whitespace and optionally an operator ('+' or '-'). If an operator - * appears first in , '*mask' is used as the starting point - * (relative), otherwise 0 is used (absolute). An operator applies to - * all following tokens up to the next operator. */ - - matched = 0; - while (*str != 0) { - while (isspace(*str)) /* skip whitespace */ - str++; - - if (*str == 0) - break; - - if (*str == '+' || *str == '-') { - op = *str++; - - /* op on first token == relative */ - if (!matched) - m = *mask; - - while (isspace(*str)) /* skip whitespace */ - str++; - - if (*str == 0) /* trailing op */ - return -EINVAL; - } - - /* find token length */ - for (n = 0; str[n] != 0 && !isspace(str[n]); n++); - - /* match token */ - if (libcfs_debug_token2mask(&t, str, n, is_subsys) != 0) - return -EINVAL; - - matched = 1; - if (op == '-') - m &= ~t; - else - m |= t; - - str += n; - } - - if (!matched) - return -EINVAL; - - *mask = m; - return 0; + return libcfs_str2mask(str, fn, mask, is_subsys ? 0 : D_CANTMASK, + 0xffffffff); } +/** + * Dump Lustre log to ::debug_file_path by calling tracefile_dump_all_pages() + */ void libcfs_debug_dumplog_internal(void *arg) { CFS_DECL_JOURNAL_DATA; CFS_PUSH_JOURNAL; - if (strncmp(debug_file_path, "NONE", 4) != 0) { + if (strncmp(debug_file_path_arr, "NONE", 4) != 0) { snprintf(debug_file_name, sizeof(debug_file_name) - 1, - "%s.%ld.%ld", debug_file_path, cfs_time_current_sec(), - (long)arg); + "%s.%ld." LPLD, debug_file_path_arr, + cfs_time_current_sec(), (long_ptr_t)arg); printk(KERN_ALERT "LustreError: dumping log to %s\n", debug_file_name); tracefile_dump_all_pages(debug_file_name); + libcfs_run_debug_log_upcall(debug_file_name); } CFS_POP_JOURNAL; } @@ -455,7 +364,7 @@ void libcfs_debug_dumplog(void) cfs_waitq_add(&debug_ctlwq, &wait); rc = cfs_kernel_thread(libcfs_debug_dumplog_thread, - (void *)(long)cfs_curproc_pid(), + (void *)(long_ptr_t)cfs_curproc_pid(), CLONE_VM | CLONE_FS | CLONE_FILES); if (rc < 0) printk(KERN_ERR "LustreError: cannot start log dump thread: " @@ -509,7 +418,7 @@ int libcfs_debug_clear_buffer(void) * should not be be marked as such. */ #undef DEBUG_SUBSYSTEM #define DEBUG_SUBSYSTEM S_UNDEFINED -int libcfs_debug_mark_buffer(char *text) +int libcfs_debug_mark_buffer(const char *text) { CDEBUG(D_TRACE,"***************************************************\n"); CDEBUG(D_WARNING, "DEBUG MARKER: %s\n", text);