X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Flibcfs_debug.h;h=8a366f9cf8e725cc290021f5ed782c2943ee9c2f;hb=970d2e6445ac505b8b2fc1e773d667fa518de3ae;hp=5380c618179b5bff77cbff5a642603073bbce8c1;hpb=744f5f8e6d8b902953431b0a39542b86c09275b1;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/libcfs_debug.h b/libcfs/include/libcfs/libcfs_debug.h index 5380c61..8a366f9 100644 --- a/libcfs/include/libcfs/libcfs_debug.h +++ b/libcfs/include/libcfs/libcfs_debug.h @@ -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. */ /* @@ -51,11 +51,11 @@ extern unsigned int libcfs_debug; extern unsigned int libcfs_printk; extern unsigned int libcfs_console_ratelimit; extern unsigned int libcfs_watchdog_ratelimit; -extern cfs_duration_t libcfs_console_max_delay; -extern cfs_duration_t libcfs_console_min_delay; +extern unsigned int libcfs_console_max_delay; +extern unsigned int libcfs_console_min_delay; extern unsigned int libcfs_console_backoff; extern unsigned int libcfs_debug_binary; -extern char libcfs_debug_file_path_arr[1024]; +extern char libcfs_debug_file_path_arr[PATH_MAX]; int libcfs_debug_mask2str(char *str, int size, int mask, int is_subsys); int libcfs_debug_str2mask(int *mask, const char *str, int is_subsys); @@ -65,16 +65,6 @@ extern unsigned int libcfs_catastrophe; extern unsigned int libcfs_panic_on_lbug; /** - * three types of trace_data in linux - */ -typedef enum { - CFS_TCD_TYPE_PROC = 0, - CFS_TCD_TYPE_SOFTIRQ, - CFS_TCD_TYPE_IRQ, - CFS_TCD_TYPE_MAX -} cfs_trace_buf_type_t; - -/** * Format for debug message headers */ struct ptldebug_header { @@ -163,6 +153,8 @@ struct ptldebug_header { #define D_SEC 0x08000000 /* keep these in sync with lnet/{utils,libcfs}/debug.c */ +#define D_HSM D_TRACE + #define D_CANTMASK (D_ERROR | D_EMERG | D_WARNING | D_CONSOLE) #ifndef DEBUG_SUBSYSTEM @@ -174,10 +166,28 @@ struct ptldebug_header { #define CDEBUG_DEFAULT_BACKOFF 2 typedef struct { cfs_time_t cdls_next; + unsigned int cdls_delay; int cdls_count; - cfs_duration_t cdls_delay; } cfs_debug_limit_state_t; +struct libcfs_debug_msg_data { + const char *msg_file; + const char *msg_fn; + int msg_subsys; + int msg_line; + int msg_mask; + cfs_debug_limit_state_t *msg_cdls; +}; + +#define LIBCFS_DEBUG_MSG_DATA_DECL(dataname, mask, cdls) \ + static struct libcfs_debug_msg_data dataname = { \ + .msg_subsys = DEBUG_SUBSYSTEM, \ + .msg_file = __FILE__, \ + .msg_fn = __FUNCTION__, \ + .msg_line = __LINE__, \ + .msg_cdls = (cdls) }; \ + dataname.msg_mask = (mask); + #if defined(__KERNEL__) || (defined(__arch_lib__) && !defined(LUSTRE_UTILS)) #ifdef CDEBUG_ENABLED @@ -193,12 +203,12 @@ static inline int cfs_cdebug_show(unsigned int mask, unsigned int subsystem) #define __CDEBUG(cdls, mask, format, ...) \ do { \ - CFS_CHECK_STACK(); \ + LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, mask, cdls); \ + \ + CFS_CHECK_STACK(&msgdata, mask, cdls); \ \ if (cfs_cdebug_show(mask, DEBUG_SUBSYSTEM)) \ - libcfs_debug_msg(cdls, DEBUG_SUBSYSTEM, mask, \ - __FILE__, __FUNCTION__, __LINE__, \ - format, ## __VA_ARGS__); \ + libcfs_debug_msg(&msgdata, format, ## __VA_ARGS__); \ } while (0) #define CDEBUG(mask, format, ...) __CDEBUG(NULL, mask, format, ## __VA_ARGS__) @@ -221,7 +231,10 @@ static inline int cfs_cdebug_show(unsigned int mask, unsigned int subsystem) #endif #else /* !__KERNEL__ && (!__arch_lib__ || LUSTRE_UTILS) */ - +static inline int cfs_cdebug_show(unsigned int mask, unsigned int subsystem) +{ + return 0; +} #define CDEBUG(mask, format, ...) \ do { \ if (((mask) & D_CANTMASK) != 0) \ @@ -236,6 +249,7 @@ do { \ #define CWARN(format, ...) CDEBUG_LIMIT(D_WARNING, format, ## __VA_ARGS__) #define CERROR(format, ...) CDEBUG_LIMIT(D_ERROR, format, ## __VA_ARGS__) +#define CNETERR(format, a...) CDEBUG_LIMIT(D_NETERROR, format, ## a) #define CEMERG(format, ...) CDEBUG_LIMIT(D_EMERG, format, ## __VA_ARGS__) #define LCONSOLE(mask, format, ...) CDEBUG(D_CONSOLE | (mask), format, ## __VA_ARGS__) @@ -249,12 +263,15 @@ do { \ #ifdef CDEBUG_ENABLED +void libcfs_log_goto(struct libcfs_debug_msg_data *, const char *, long_ptr_t); #define GOTO(label, rc) \ do { \ - long_ptr_t GOTO__ret = (long_ptr_t)(rc); \ - CDEBUG(D_TRACE,"Process leaving via %s (rc=" LPLU " : " LPLD \ - " : " LPLX ")\n", #label, (ulong_ptr_t)GOTO__ret, \ - GOTO__ret, GOTO__ret); \ + if (cfs_cdebug_show(D_TRACE, DEBUG_SUBSYSTEM)) { \ + LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_TRACE, NULL); \ + libcfs_log_goto(&msgdata, #label, (long_ptr_t)(rc)); \ + } else { \ + (void)(rc); \ + } \ goto label; \ } while (0) #else @@ -268,13 +285,18 @@ do { \ * there will be a warning in osx. */ #if defined(__GNUC__) + +long libcfs_log_return(struct libcfs_debug_msg_data *, long rc); #define RETURN(rc) \ do { \ - typeof(rc) RETURN__ret = (rc); \ - CDEBUG(D_TRACE, "Process leaving (rc=%lu : %ld : %lx)\n", \ - (long)RETURN__ret, (long)RETURN__ret, (long)RETURN__ret);\ EXIT_NESTING; \ - return RETURN__ret; \ + if (cfs_cdebug_show(D_TRACE, DEBUG_SUBSYSTEM)) { \ + LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_TRACE, NULL); \ + return (typeof(rc))libcfs_log_return(&msgdata, \ + (long)(rc)); \ + } \ + \ + return (rc); \ } while (0) #elif defined(_MSC_VER) #define RETURN(rc) \ @@ -312,54 +334,14 @@ do { \ return; \ } while (0) -struct libcfs_debug_msg_data { - cfs_debug_limit_state_t *msg_cdls; - int msg_subsys; - const char *msg_file; - const char *msg_fn; - int msg_line; -}; - -#define DEBUG_MSG_DATA_INIT(cdls, subsystem, file, func, ln ) { \ - /* msg_cdls */ (cdls), \ - /* msg_subsys */ (subsystem), \ - /* msg_file */ (file), \ - /* msg_fn */ (func), \ - /* msg_line */ (ln) \ - } - - -extern int libcfs_debug_vmsg2(cfs_debug_limit_state_t *cdls, - int subsys, int mask, - const char *file, const char *fn, const int line, - const char *format1, va_list args, - const char *format2, ...) - __attribute__ ((format (printf, 9, 10))); - -#define libcfs_debug_vmsg(cdls, subsys, mask, file, fn, line, format, args) \ - libcfs_debug_vmsg2(cdls, subsys, mask, file, fn,line,format,args,NULL,NULL) - -#define libcfs_debug_msg(cdls, subsys, mask, file, fn, line, format, ...) \ - libcfs_debug_vmsg2(cdls, subsys, mask, file, fn,line,NULL,NULL,format, ## __VA_ARGS__) - -#define cdebug_va(cdls, mask, file, func, line, fmt, args) do { \ - CFS_CHECK_STACK(); \ - \ - if (cfs_cdebug_show(mask, DEBUG_SUBSYSTEM)) \ - libcfs_debug_vmsg(cdls, DEBUG_SUBSYSTEM, (mask), \ - (file), (func), (line), fmt, args); \ -} while(0) - -#define cdebug(cdls, mask, file, func, line, fmt, ...) do { \ - CFS_CHECK_STACK(); \ - \ - if (cfs_cdebug_show(mask, DEBUG_SUBSYSTEM)) \ - libcfs_debug_msg(cdls, DEBUG_SUBSYSTEM, (mask), \ - (file), (func), (line), fmt, ## __VA_ARGS__);\ -} while(0) +extern int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata, + const char *format1, ...) + __attribute__ ((format (printf, 2, 3))); -extern void libcfs_assertion_failed(const char *expr, const char *file, - const char *fn, const int line); +extern int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata, + const char *format1, + va_list args, const char *format2, ...) + __attribute__ ((format (printf, 4, 5))); /* one more external symbol that tracefile provides: */ extern int cfs_trace_copyout_string(char *usr_buffer, int usr_buffer_nob,