The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/include/sys/zfs_debug.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 /*
   22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
   23  * Copyright (c) 2012, 2019 by Delphix. All rights reserved.
   24  */
   25 
   26 #ifndef _SYS_ZFS_DEBUG_H
   27 #define _SYS_ZFS_DEBUG_H
   28 
   29 #ifdef  __cplusplus
   30 extern "C" {
   31 #endif
   32 
   33 #ifndef TRUE
   34 #define TRUE 1
   35 #endif
   36 
   37 #ifndef FALSE
   38 #define FALSE 0
   39 #endif
   40 
   41 extern int zfs_flags;
   42 extern int zfs_recover;
   43 extern int zfs_free_leak_on_eio;
   44 extern int zfs_dbgmsg_enable;
   45 
   46 #define ZFS_DEBUG_DPRINTF               (1 << 0)
   47 #define ZFS_DEBUG_DBUF_VERIFY           (1 << 1)
   48 #define ZFS_DEBUG_DNODE_VERIFY          (1 << 2)
   49 #define ZFS_DEBUG_SNAPNAMES             (1 << 3)
   50 #define ZFS_DEBUG_MODIFY                (1 << 4)
   51 /* 1<<5 was previously used, try not to reuse */
   52 #define ZFS_DEBUG_ZIO_FREE              (1 << 6)
   53 #define ZFS_DEBUG_HISTOGRAM_VERIFY      (1 << 7)
   54 #define ZFS_DEBUG_METASLAB_VERIFY       (1 << 8)
   55 #define ZFS_DEBUG_SET_ERROR             (1 << 9)
   56 #define ZFS_DEBUG_INDIRECT_REMAP        (1 << 10)
   57 #define ZFS_DEBUG_TRIM                  (1 << 11)
   58 #define ZFS_DEBUG_LOG_SPACEMAP          (1 << 12)
   59 #define ZFS_DEBUG_METASLAB_ALLOC        (1 << 13)
   60 
   61 extern void __set_error(const char *file, const char *func, int line, int err);
   62 extern void __zfs_dbgmsg(char *buf);
   63 extern void __dprintf(boolean_t dprint, const char *file, const char *func,
   64     int line, const char *fmt, ...)  __attribute__((format(printf, 5, 6)));
   65 
   66 /*
   67  * Some general principles for using zfs_dbgmsg():
   68  * 1. We don't want to pollute the log with typically-irrelevant messages,
   69  *    so don't print too many messages in the "normal" code path - O(1)
   70  *    per txg.
   71  * 2. We want to know for sure what happened, so make the message specific
   72  *    (e.g. *which* thing am I operating on).
   73  * 3. Do print a message when something unusual or unexpected happens
   74  *    (e.g. error cases).
   75  * 4. Print a message when making user-initiated on-disk changes.
   76  *
   77  * Note that besides principle 1, another reason that we don't want to
   78  * use zfs_dbgmsg in high-frequency routines is the potential impact
   79  * that it can have on performance.
   80  */
   81 #define zfs_dbgmsg(...) \
   82         if (zfs_dbgmsg_enable) \
   83                 __dprintf(B_FALSE, __FILE__, __func__, __LINE__, __VA_ARGS__)
   84 
   85 #ifdef ZFS_DEBUG
   86 /*
   87  * To enable this:
   88  *
   89  * $ echo 1 >/sys/module/zfs/parameters/zfs_flags
   90  */
   91 #define dprintf(...) \
   92         if (zfs_flags & ZFS_DEBUG_DPRINTF) \
   93                 __dprintf(B_TRUE, __FILE__, __func__, __LINE__, __VA_ARGS__)
   94 #else
   95 #define dprintf(...) ((void)0)
   96 #endif /* ZFS_DEBUG */
   97 
   98 extern void zfs_panic_recover(const char *fmt, ...);
   99 
  100 extern void zfs_dbgmsg_init(void);
  101 extern void zfs_dbgmsg_fini(void);
  102 
  103 #ifndef _KERNEL
  104 extern int dprintf_find_string(const char *string);
  105 extern void zfs_dbgmsg_print(const char *tag);
  106 #endif
  107 
  108 #ifdef  __cplusplus
  109 }
  110 #endif
  111 
  112 #endif  /* _SYS_ZFS_DEBUG_H */

Cache object: dd4b1ccb01f7ad911eb426181ff48455


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.