]> git.proxmox.com Git - mirror_spl-debian.git/blobdiff - module/spl/spl-debug.c
Imported Upstream version 0.6.2
[mirror_spl-debian.git] / module / spl / spl-debug.c
index 5284eb3394e0521c5d67d97d392212854148639a..d450368b1038084646e6068a375f2bc9990e9eee 100644 (file)
@@ -6,7 +6,7 @@
  *  UCRL-CODE-235197
  *
  *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://github.com/behlendorf/spl/>.
+ *  For details, see <http://zfsonlinux.org/>.
  *
  *  The SPL is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU General Public License as published by the
 #include <linux/spinlock.h>
 #include <linux/proc_compat.h>
 #include <linux/file_compat.h>
+#include <linux/swap.h>
 #include <sys/sysmacros.h>
 #include <spl-debug.h>
 #include <spl-trace.h>
 #include <spl-ctl.h>
 
-#ifdef DEBUG_SUBSYSTEM
-#undef DEBUG_SUBSYSTEM
+#ifdef SS_DEBUG_SUBSYS
+#undef SS_DEBUG_SUBSYS
 #endif
 
-#define DEBUG_SUBSYSTEM S_DEBUG
+#define SS_DEBUG_SUBSYS SS_DEBUG
+
+/* Debug log support enabled */
+#ifdef DEBUG_LOG
 
 unsigned long spl_debug_subsys = ~0;
 EXPORT_SYMBOL(spl_debug_subsys);
 module_param(spl_debug_subsys, ulong, 0644);
 MODULE_PARM_DESC(spl_debug_subsys, "Subsystem debugging level mask.");
 
-unsigned long spl_debug_mask = (D_EMERG | D_ERROR | D_WARNING | D_CONSOLE);
+unsigned long spl_debug_mask = SD_CANTMASK;
 EXPORT_SYMBOL(spl_debug_mask);
 module_param(spl_debug_mask, ulong, 0644);
 MODULE_PARM_DESC(spl_debug_mask, "Debugging level mask.");
 
-unsigned long spl_debug_printk = D_CANTMASK;
+unsigned long spl_debug_printk = SD_CANTMASK;
 EXPORT_SYMBOL(spl_debug_printk);
 module_param(spl_debug_printk, ulong, 0644);
 MODULE_PARM_DESC(spl_debug_printk, "Console printk level mask.");
@@ -120,40 +124,64 @@ spl_debug_subsys2str(int subsys)
         switch (subsys) {
         default:
                 return NULL;
-        case S_UNDEFINED:
+        case SS_UNDEFINED:
                 return "undefined";
-        case S_ATOMIC:
+        case SS_ATOMIC:
                 return "atomic";
-        case S_KOBJ:
+        case SS_KOBJ:
                 return "kobj";
-        case S_VNODE:
+        case SS_VNODE:
                 return "vnode";
-        case S_TIME:
+        case SS_TIME:
                 return "time";
-        case S_RWLOCK:
+        case SS_RWLOCK:
                 return "rwlock";
-        case S_THREAD:
+        case SS_THREAD:
                 return "thread";
-        case S_CONDVAR:
+        case SS_CONDVAR:
                 return "condvar";
-        case S_MUTEX:
+        case SS_MUTEX:
                 return "mutex";
-        case S_RNG:
+        case SS_RNG:
                 return "rng";
-        case S_TASKQ:
+        case SS_TASKQ:
                 return "taskq";
-        case S_KMEM:
+        case SS_KMEM:
                 return "kmem";
-        case S_DEBUG:
+        case SS_DEBUG:
                 return "debug";
-        case S_GENERIC:
+        case SS_GENERIC:
                 return "generic";
-        case S_PROC:
+        case SS_PROC:
                 return "proc";
-        case S_MODULE:
+        case SS_MODULE:
                 return "module";
-       case S_CRED:
+        case SS_CRED:
                 return "cred";
+        case SS_KSTAT:
+                return "kstat";
+        case SS_XDR:
+                return "xdr";
+        case SS_TSD:
+                return "tsd";
+       case SS_ZLIB:
+               return "zlib";
+        case SS_USER1:
+                return "user1";
+        case SS_USER2:
+                return "user2";
+        case SS_USER3:
+                return "user3";
+        case SS_USER4:
+                return "user4";
+        case SS_USER5:
+                return "user5";
+        case SS_USER6:
+                return "user6";
+        case SS_USER7:
+                return "user7";
+        case SS_USER8:
+                return "user8";
         }
 }
 
@@ -163,23 +191,23 @@ spl_debug_dbg2str(int debug)
         switch (debug) {
         default:
                 return NULL;
-        case D_TRACE:
+        case SD_TRACE:
                 return "trace";
-        case D_INFO:
+        case SD_INFO:
                 return "info";
-        case D_WARNING:
+        case SD_WARNING:
                 return "warning";
-        case D_ERROR:
+        case SD_ERROR:
                 return "error";
-        case D_EMERG:
+        case SD_EMERG:
                 return "emerg";
-        case D_CONSOLE:
+        case SD_CONSOLE:
                 return "console";
-        case D_IOCTL:
+        case SD_IOCTL:
                 return "ioctl";
-        case D_DPRINTF:
+        case SD_DPRINTF:
                 return "dprintf";
-        case D_OTHER:
+        case SD_OTHER:
                 return "other";
         }
 }
@@ -493,21 +521,21 @@ trace_print_to_console(struct spl_debug_header *hdr, int mask, const char *buf,
 {
         char *prefix = "SPL", *ptype = NULL;
 
-        if ((mask & D_EMERG) != 0) {
+        if ((mask & SD_EMERG) != 0) {
                 prefix = "SPLError";
                 ptype = KERN_EMERG;
-        } else if ((mask & D_ERROR) != 0) {
+        } else if ((mask & SD_ERROR) != 0) {
                 prefix = "SPLError";
                 ptype = KERN_ERR;
-        } else if ((mask & D_WARNING) != 0) {
+        } else if ((mask & SD_WARNING) != 0) {
                 prefix = "SPL";
                 ptype = KERN_WARNING;
-        } else if ((mask & (D_CONSOLE | spl_debug_printk)) != 0) {
+        } else if ((mask & (SD_CONSOLE | spl_debug_printk)) != 0) {
                 prefix = "SPL";
                 ptype = KERN_INFO;
         }
 
-        if ((mask & D_CONSOLE) != 0) {
+        if ((mask & SD_CONSOLE) != 0) {
                 printk("%s%s: %.*s", ptype, prefix, len, buf);
         } else {
                 printk("%s%s: %d:%d:(%s:%d:%s()) %.*s", ptype, prefix,
@@ -521,7 +549,7 @@ trace_print_to_console(struct spl_debug_header *hdr, int mask, const char *buf,
 static int
 trace_max_debug_mb(void)
 {
-        return MAX(512, ((num_physpages >> (20 - PAGE_SHIFT)) * 80) / 100);
+        return MAX(512, ((totalram_pages >> (20 - PAGE_SHIFT)) * 80) / 100);
 }
 
 static struct trace_page *
@@ -649,20 +677,18 @@ spl_debug_msg(void *arg, int subsys, int mask, const char *file,
         int                      max_nob;
         va_list                  ap;
         int                      i;
-        int                      remain;
 
        if (subsys == 0)
-               subsys = DEBUG_SUBSYSTEM;
+               subsys = SS_DEBUG_SUBSYS;
 
        if (mask == 0)
-               mask = D_EMERG;
+               mask = SD_EMERG;
 
         if (strchr(file, '/'))
                 file = strrchr(file, '/') + 1;
 
-        trace_set_debug_header(&header, subsys, mask, line, 0);
-
         tcd = trace_get_tcd();
+        trace_set_debug_header(&header, subsys, mask, line, 0);
         if (tcd == NULL)
                 goto console;
 
@@ -685,7 +711,7 @@ spl_debug_msg(void *arg, int subsys, int mask, const char *file,
                 tage = trace_get_tage(tcd, needed + known_size + 1);
                 if (tage == NULL) {
                         if (needed + known_size > PAGE_SIZE)
-                                mask |= D_ERROR;
+                                mask |= SD_ERROR;
 
                         trace_put_tcd(tcd);
                         tcd = NULL;
@@ -698,7 +724,7 @@ spl_debug_msg(void *arg, int subsys, int mask, const char *file,
                 max_nob = PAGE_SIZE - tage->used - known_size;
                 if (max_nob <= 0) {
                         printk(KERN_EMERG "negative max_nob: %i\n", max_nob);
-                        mask |= D_ERROR;
+                        mask |= SD_ERROR;
                         trace_put_tcd(tcd);
                         tcd = NULL;
                         goto console;
@@ -706,13 +732,8 @@ spl_debug_msg(void *arg, int subsys, int mask, const char *file,
 
                 needed = 0;
                 if (format) {
-                        remain = max_nob - needed;
-                        if (remain < 0)
-                                remain = 0;
-
                         va_start(ap, format);
-                        needed += vsnprintf(string_buf+needed, remain,
-                           format, ap);
+                        needed += vsnprintf(string_buf, max_nob, format, ap);
                         va_end(ap);
                 }
 
@@ -787,13 +808,10 @@ console:
 
                 needed = 0;
                 if (format != NULL) {
-                        remain = TRACE_CONSOLE_BUFFER_SIZE - needed;
-                        if (remain > 0) {
-                                va_start(ap, format);
-                                needed += vsnprintf(string_buf+needed, remain,
-                                   format, ap);
-                                va_end(ap);
-                        }
+                        va_start(ap, format);
+                        needed += vsnprintf(string_buf,
+                            TRACE_CONSOLE_BUFFER_SIZE, format, ap);
+                        va_end(ap);
                 }
                 trace_print_to_console(&header, mask,
                                  string_buf, needed, file, fn);
@@ -1069,7 +1087,7 @@ EXPORT_SYMBOL(spl_debug_dumpstack);
 void spl_debug_bug(char *file, const char *func, const int line, int flags)
 {
         spl_debug_catastrophe = 1;
-        spl_debug_msg(NULL, 0, D_EMERG, file, func, line, "SPL PANIC\n");
+        spl_debug_msg(NULL, 0, SD_EMERG, file, func, line, "SPL PANIC\n");
 
         if (in_interrupt())
                 panic("SPL PANIC in interrupt.\n");
@@ -1082,10 +1100,11 @@ void spl_debug_bug(char *file, const char *func, const int line, int flags)
                 spl_panic_in_progress = 1;
 
         spl_debug_dumpstack(NULL);
-        spl_debug_dumplog(flags);
 
-        if (spl_debug_panic_on_bug)
+        if (spl_debug_panic_on_bug) {
+                spl_debug_dumplog(flags);
                 panic("SPL PANIC");
+        }
 
         set_task_state(current, TASK_UNINTERRUPTIBLE);
         while (1)
@@ -1104,9 +1123,9 @@ EXPORT_SYMBOL(spl_debug_clear_buffer);
 int
 spl_debug_mark_buffer(char *text)
 {
-        CDEBUG(D_WARNING, "*************************************\n");
-        CDEBUG(D_WARNING, "DEBUG MARKER: %s\n", text);
-        CDEBUG(D_WARNING, "*************************************\n");
+        SDEBUG(SD_WARNING, "*************************************\n");
+        SDEBUG(SD_WARNING, "DEBUG MARKER: %s\n", text);
+        SDEBUG(SD_WARNING, "*************************************\n");
 
         return 0;
 }
@@ -1161,7 +1180,7 @@ out:
 }
 
 int
-debug_init(void)
+spl_debug_init(void)
 {
         int rc, max = spl_debug_mb;
 
@@ -1170,7 +1189,7 @@ debug_init(void)
 
         /* If spl_debug_mb is set to an invalid value or uninitialized
          * then just make the total buffers smp_num_cpus TCD_MAX_PAGES */
-        if (max > (num_physpages >> (20 - 2 - PAGE_SHIFT)) / 5 ||
+        if (max > (totalram_pages >> (20 - 2 - PAGE_SHIFT)) / 5 ||
             max >= 512 || max < 0) {
                 max = TCD_MAX_PAGES;
         } else {
@@ -1229,7 +1248,9 @@ trace_fini(void)
 }
 
 void
-debug_fini(void)
+spl_debug_fini(void)
 {
         trace_fini();
 }
+
+#endif /* DEBUG_LOG */