linux/fs/xfs/xfs_error.h
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
   4 * All Rights Reserved.
   5 */
   6#ifndef __XFS_ERROR_H__
   7#define __XFS_ERROR_H__
   8
   9struct xfs_mount;
  10
  11extern void xfs_error_report(const char *tag, int level, struct xfs_mount *mp,
  12                        const char *filename, int linenum,
  13                        xfs_failaddr_t failaddr);
  14extern void xfs_corruption_error(const char *tag, int level,
  15                        struct xfs_mount *mp, void *buf, size_t bufsize,
  16                        const char *filename, int linenum,
  17                        xfs_failaddr_t failaddr);
  18extern void xfs_buf_verifier_error(struct xfs_buf *bp, int error,
  19                        const char *name, void *buf, size_t bufsz,
  20                        xfs_failaddr_t failaddr);
  21extern void xfs_verifier_error(struct xfs_buf *bp, int error,
  22                        xfs_failaddr_t failaddr);
  23extern void xfs_inode_verifier_error(struct xfs_inode *ip, int error,
  24                        const char *name, void *buf, size_t bufsz,
  25                        xfs_failaddr_t failaddr);
  26
  27#define XFS_ERROR_REPORT(e, lvl, mp)    \
  28        xfs_error_report(e, lvl, mp, __FILE__, __LINE__, __return_address)
  29#define XFS_CORRUPTION_ERROR(e, lvl, mp, buf, bufsize)  \
  30        xfs_corruption_error(e, lvl, mp, buf, bufsize, \
  31                             __FILE__, __LINE__, __return_address)
  32
  33#define XFS_ERRLEVEL_OFF        0
  34#define XFS_ERRLEVEL_LOW        1
  35#define XFS_ERRLEVEL_HIGH       5
  36
  37/* Dump 128 bytes of any corrupt buffer */
  38#define XFS_CORRUPTION_DUMP_LEN         (128)
  39
  40/*
  41 * Macros to set EFSCORRUPTED & return/branch.
  42 */
  43#define XFS_WANT_CORRUPTED_GOTO(mp, x, l)       \
  44        { \
  45                int fs_is_ok = (x); \
  46                ASSERT(fs_is_ok); \
  47                if (unlikely(!fs_is_ok)) { \
  48                        XFS_ERROR_REPORT("XFS_WANT_CORRUPTED_GOTO", \
  49                                         XFS_ERRLEVEL_LOW, mp); \
  50                        error = -EFSCORRUPTED; \
  51                        goto l; \
  52                } \
  53        }
  54
  55#define XFS_WANT_CORRUPTED_RETURN(mp, x)        \
  56        { \
  57                int fs_is_ok = (x); \
  58                ASSERT(fs_is_ok); \
  59                if (unlikely(!fs_is_ok)) { \
  60                        XFS_ERROR_REPORT("XFS_WANT_CORRUPTED_RETURN", \
  61                                         XFS_ERRLEVEL_LOW, mp); \
  62                        return -EFSCORRUPTED; \
  63                } \
  64        }
  65
  66#ifdef DEBUG
  67extern int xfs_errortag_init(struct xfs_mount *mp);
  68extern void xfs_errortag_del(struct xfs_mount *mp);
  69extern bool xfs_errortag_test(struct xfs_mount *mp, const char *expression,
  70                const char *file, int line, unsigned int error_tag);
  71#define XFS_TEST_ERROR(expr, mp, tag)           \
  72        ((expr) || xfs_errortag_test((mp), #expr, __FILE__, __LINE__, (tag)))
  73
  74extern int xfs_errortag_get(struct xfs_mount *mp, unsigned int error_tag);
  75extern int xfs_errortag_set(struct xfs_mount *mp, unsigned int error_tag,
  76                unsigned int tag_value);
  77extern int xfs_errortag_add(struct xfs_mount *mp, unsigned int error_tag);
  78extern int xfs_errortag_clearall(struct xfs_mount *mp);
  79#else
  80#define xfs_errortag_init(mp)                   (0)
  81#define xfs_errortag_del(mp)
  82#define XFS_TEST_ERROR(expr, mp, tag)           (expr)
  83#define xfs_errortag_set(mp, tag, val)          (ENOSYS)
  84#define xfs_errortag_add(mp, tag)               (ENOSYS)
  85#define xfs_errortag_clearall(mp)               (ENOSYS)
  86#endif /* DEBUG */
  87
  88/*
  89 * XFS panic tags -- allow a call to xfs_alert_tag() be turned into
  90 *                      a panic by setting xfs_panic_mask in a sysctl.
  91 */
  92#define         XFS_NO_PTAG                     0
  93#define         XFS_PTAG_IFLUSH                 0x00000001
  94#define         XFS_PTAG_LOGRES                 0x00000002
  95#define         XFS_PTAG_AILDELETE              0x00000004
  96#define         XFS_PTAG_ERROR_REPORT           0x00000008
  97#define         XFS_PTAG_SHUTDOWN_CORRUPT       0x00000010
  98#define         XFS_PTAG_SHUTDOWN_IOERROR       0x00000020
  99#define         XFS_PTAG_SHUTDOWN_LOGERROR      0x00000040
 100#define         XFS_PTAG_FSBLOCK_ZERO           0x00000080
 101#define         XFS_PTAG_VERIFIER_ERROR         0x00000100
 102
 103#endif  /* __XFS_ERROR_H__ */
 104