Whamcloud - gitweb
b=22375 Add walk_stack callback for dump_trace.
[fs/lustre-release.git] / libcfs / libcfs / linux / linux-debug.c
index 7bcb5d6..363ec8c 100644 (file)
@@ -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.
  */
 /*
@@ -73,9 +73,7 @@
 
 #include "tracefile.h"
 
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
 #include <linux/kallsyms.h>
-#endif
 
 char lnet_upcall[1024] = "/usr/lib/lustre/lnet_upcall";
 char lnet_debug_log_upcall[1024] = "/usr/lib/lustre/lnet_debug_log_upcall";
@@ -173,7 +171,8 @@ void lbug_with_loc(const char *file, const char *func, const int line)
 {
         libcfs_catastrophe = 1;
         libcfs_debug_msg(NULL, 0, D_EMERG, file, func, line,
-                         "LBUG - trying to dump log to %s\n", debug_file_path);
+                         "LBUG - trying to dump log to %s\n",
+                         libcfs_debug_file_path);
         libcfs_debug_dumplog();
         libcfs_run_lbug_upcall(file, func, line);
         asm("int $3");
@@ -212,7 +211,7 @@ void lbug_with_loc(const char *file, const char *func, const int line)
 static void
 print_trace_warning_symbol(void *data, char *msg, unsigned long symbol)
 {
-       printk(data);
+        printk("%s", (char *)data);
        print_symbol(msg, symbol);
        printk("\n");
 }
@@ -250,6 +249,9 @@ static DUMP_TRACE_CONST struct stacktrace_ops print_trace_ops = {
        .warning_symbol = print_trace_warning_symbol,
        .stack = print_trace_stack,
        .address = print_trace_address,
+#ifdef STACKTRACE_OPS_HAVE_WALK_STACK
+       .walk_stack = print_context_stack,
+#endif
 };
 #endif
 
@@ -263,6 +265,8 @@ void libcfs_debug_dumpstack(struct task_struct *tsk)
 #elif defined(HAVE_DUMP_TRACE)
         /* dump_stack() */
         /* show_trace() */
+        if (tsk == NULL)
+                tsk = current;
        printk("Pid: %d, comm: %.20s\n", tsk->pid, tsk->comm);
         /* show_trace_log_lvl() */
        printk("\nCall Trace:\n");
@@ -308,7 +312,7 @@ static int panic_notifier(struct notifier_block *self, unsigned long unused1,
          * console on the rare cases it is ever triggered. */
 
         if (in_interrupt()) {
-                trace_debug_print();
+                cfs_trace_debug_print();
         } else {
                 while (current->lock_depth >= 0)
                         unlock_kernel();