X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Flibcfs%2Fdebug.c;h=de6e0da57b6e56ac387da570115fc854c39fd73e;hb=673f374637d090ba8c4a2cec48eb250b42d2dfa8;hp=78a7323fd9a409d0cb5d1bfbe950702820066042;hpb=ca85d0f7d0c312bacf07842bc57b01c0a8af9180;p=fs%2Flustre-release.git diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c index 78a7323..de6e0da 100644 --- a/libcfs/libcfs/debug.c +++ b/libcfs/libcfs/debug.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -60,12 +60,12 @@ CFS_MODULE_PARM(libcfs_debug, "i", int, 0644, "Lustre kernel debug mask"); EXPORT_SYMBOL(libcfs_debug); -int libcfs_debug_mb = -1; -CFS_MODULE_PARM(libcfs_debug_mb, "i", int, 0644, +unsigned int libcfs_debug_mb = 0; +CFS_MODULE_PARM(libcfs_debug_mb, "i", uint, 0644, "Total debug buffer size."); EXPORT_SYMBOL(libcfs_debug_mb); -unsigned int libcfs_printk = (D_CANTMASK | D_NETERROR); +unsigned int libcfs_printk = D_CANTMASK; CFS_MODULE_PARM(libcfs_printk, "i", uint, 0644, "Lustre kernel debug console mask"); EXPORT_SYMBOL(libcfs_printk); @@ -105,21 +105,21 @@ EXPORT_SYMBOL(libcfs_catastrophe); unsigned int libcfs_watchdog_ratelimit = 300; EXPORT_SYMBOL(libcfs_watchdog_ratelimit); -unsigned int libcfs_panic_on_lbug = 0; +unsigned int libcfs_panic_on_lbug = 1; CFS_MODULE_PARM(libcfs_panic_on_lbug, "i", uint, 0644, "Lustre kernel panic on LBUG"); EXPORT_SYMBOL(libcfs_panic_on_lbug); -atomic_t libcfs_kmemory = ATOMIC_INIT(0); +cfs_atomic_t libcfs_kmemory = CFS_ATOMIC_INIT(0); EXPORT_SYMBOL(libcfs_kmemory); static cfs_waitq_t debug_ctlwq; -char debug_file_path_arr[1024] = DEBUG_FILE_PATH_DEFAULT; +char libcfs_debug_file_path_arr[PATH_MAX] = LIBCFS_DEBUG_FILE_PATH_DEFAULT; /* We need to pass a pointer here, but elsewhere this must be a const */ -char *debug_file_path = &debug_file_path_arr[0]; -CFS_MODULE_PARM(debug_file_path, "s", charp, 0644, +char *libcfs_debug_file_path; +CFS_MODULE_PARM(libcfs_debug_file_path, "s", charp, 0644, "Path for dumping debug logs, " "set 'NONE' to prevent log dumping"); @@ -316,12 +316,14 @@ libcfs_debug_str2mask(int *mask, const char *str, int is_subsys) if ((t = sscanf(str, "%i%n", &m, &matched)) >= 1 && matched == n) { + CWARN("You are trying to use a numerical value for the mask -" + " this will be deprecated in a future release.\n"); *mask = m; return 0; } - return libcfs_str2mask(str, fn, mask, is_subsys ? 0 : D_CANTMASK, - 0xffffffff); + return cfs_str2mask(str, fn, mask, is_subsys ? 0 : D_CANTMASK, + 0xffffffff); } /** @@ -333,13 +335,13 @@ void libcfs_debug_dumplog_internal(void *arg) CFS_PUSH_JOURNAL; - if (strncmp(debug_file_path_arr, "NONE", 4) != 0) { + if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) != 0) { snprintf(debug_file_name, sizeof(debug_file_name) - 1, - "%s.%ld." LPLD, debug_file_path_arr, + "%s.%ld." LPLD, libcfs_debug_file_path_arr, cfs_time_current_sec(), (long_ptr_t)arg); - printk(KERN_ALERT "LustreError: dumping log to %s\n", + printk(CFS_KERN_ALERT "LustreError: dumping log to %s\n", debug_file_name); - tracefile_dump_all_pages(debug_file_name); + cfs_tracefile_dump_all_pages(debug_file_name); libcfs_run_debug_log_upcall(debug_file_name); } CFS_POP_JOURNAL; @@ -347,7 +349,6 @@ void libcfs_debug_dumplog_internal(void *arg) int libcfs_debug_dumplog_thread(void *arg) { - cfs_daemonize(""); libcfs_debug_dumplog_internal(arg); cfs_waitq_signal(&debug_ctlwq); return 0; @@ -355,48 +356,60 @@ int libcfs_debug_dumplog_thread(void *arg) void libcfs_debug_dumplog(void) { - int rc; cfs_waitlink_t wait; + cfs_task_t *dumper; ENTRY; /* we're being careful to ensure that the kernel thread is * able to set our state to running as it exits before we * get to schedule() */ cfs_waitlink_init(&wait); - set_current_state(TASK_INTERRUPTIBLE); + cfs_set_current_state(CFS_TASK_INTERRUPTIBLE); cfs_waitq_add(&debug_ctlwq, &wait); - rc = cfs_kernel_thread(libcfs_debug_dumplog_thread, - (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: " - "%d\n", rc); + dumper = cfs_kthread_run(libcfs_debug_dumplog_thread, + (void*)(long)cfs_curproc_pid(), + "libcfs_debug_dumper"); + if (IS_ERR(dumper)) + printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:" + " %ld\n", PTR_ERR(dumper)); else cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE); - /* be sure to teardown if kernel_thread() failed */ + /* be sure to teardown if cfs_kernel_thread() failed */ cfs_waitq_del(&debug_ctlwq, &wait); - set_current_state(TASK_RUNNING); + cfs_set_current_state(CFS_TASK_RUNNING); } int libcfs_debug_init(unsigned long bufsize) { int rc = 0; - int max = libcfs_debug_mb; + unsigned int max = libcfs_debug_mb; cfs_waitq_init(&debug_ctlwq); - libcfs_console_max_delay = CDEBUG_DEFAULT_MAX_DELAY; - libcfs_console_min_delay = CDEBUG_DEFAULT_MIN_DELAY; + + if (libcfs_console_max_delay <= 0 || /* not set by user or */ + libcfs_console_min_delay <= 0 || /* set to invalid values */ + libcfs_console_min_delay >= libcfs_console_max_delay) { + libcfs_console_max_delay = CDEBUG_DEFAULT_MAX_DELAY; + libcfs_console_min_delay = CDEBUG_DEFAULT_MIN_DELAY; + } + + if (libcfs_debug_file_path != NULL) { + memset(libcfs_debug_file_path_arr, 0, PATH_MAX); + strncpy(libcfs_debug_file_path_arr, + libcfs_debug_file_path, PATH_MAX-1); + } + /* If libcfs_debug_mb is set to an invalid value or uninitialized * then just make the total buffers smp_num_cpus * TCD_MAX_PAGES */ - if (max > trace_max_debug_mb() || max < num_possible_cpus()) { + if (max > cfs_trace_max_debug_mb() || max < cfs_num_possible_cpus()) { max = TCD_MAX_PAGES; } else { - max = (max / num_possible_cpus()); + max = (max / cfs_num_possible_cpus()); max = (max << (20 - CFS_PAGE_SHIFT)); } - rc = tracefile_init(max); + rc = cfs_tracefile_init(max); if (rc == 0) libcfs_register_panic_notifier(); @@ -407,13 +420,13 @@ int libcfs_debug_init(unsigned long bufsize) int libcfs_debug_cleanup(void) { libcfs_unregister_panic_notifier(); - tracefile_exit(); + cfs_tracefile_exit(); return 0; } int libcfs_debug_clear_buffer(void) { - trace_flush_pages(); + cfs_trace_flush_pages(); return 0; } @@ -434,7 +447,7 @@ int libcfs_debug_mark_buffer(const char *text) void libcfs_debug_set_level(unsigned int debug_level) { - printk(KERN_WARNING "Lustre: Setting portals debug level to %08x\n", + printk(CFS_KERN_WARNING "Lustre: Setting portals debug level to %08x\n", debug_level); libcfs_debug = debug_level; }