| // SPDX-License-Identifier: GPL-2.0 | |
| /* | |
| * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc. | |
| * All Rights Reserved. | |
| */ | |
| #ifndef __XFS_ERROR_H__ | |
| #define __XFS_ERROR_H__ | |
| struct xfs_mount; | |
| void xfs_error_report(const char *tag, int level, struct xfs_mount *mp, | |
| const char *filename, int linenum, xfs_failaddr_t failaddr); | |
| void xfs_corruption_error(const char *tag, int level, struct xfs_mount *mp, | |
| const void *buf, size_t bufsize, const char *filename, | |
| int linenum, xfs_failaddr_t failaddr); | |
| void xfs_buf_corruption_error(struct xfs_buf *bp, xfs_failaddr_t fa); | |
| void xfs_buf_verifier_error(struct xfs_buf *bp, int error, const char *name, | |
| const void *buf, size_t bufsz, xfs_failaddr_t failaddr); | |
| void xfs_verifier_error(struct xfs_buf *bp, int error, xfs_failaddr_t failaddr); | |
| void xfs_inode_verifier_error(struct xfs_inode *ip, int error, const char *name, | |
| const void *buf, size_t bufsz, xfs_failaddr_t failaddr); | |
| #define XFS_ERROR_REPORT(e, lvl, mp) \ | |
| xfs_error_report(e, lvl, mp, __FILE__, __LINE__, __return_address) | |
| #define XFS_CORRUPTION_ERROR(e, lvl, mp, buf, bufsize) \ | |
| xfs_corruption_error(e, lvl, mp, buf, bufsize, \ | |
| __FILE__, __LINE__, __return_address) | |
| #define XFS_ERRLEVEL_OFF 0 | |
| #define XFS_ERRLEVEL_LOW 1 | |
| #define XFS_ERRLEVEL_HIGH 5 | |
| /* Dump 128 bytes of any corrupt buffer */ | |
| #define XFS_CORRUPTION_DUMP_LEN (128) | |
| #ifdef DEBUG | |
| int xfs_errortag_init(struct xfs_mount *mp); | |
| void xfs_errortag_del(struct xfs_mount *mp); | |
| bool xfs_errortag_test(struct xfs_mount *mp, const char *file, int line, | |
| unsigned int error_tag); | |
| #define XFS_TEST_ERROR(mp, tag) \ | |
| xfs_errortag_test((mp), __FILE__, __LINE__, (tag)) | |
| void xfs_errortag_delay(struct xfs_mount *mp, const char *file, int line, | |
| unsigned int error_tag); | |
| #define XFS_ERRORTAG_DELAY(mp, tag) \ | |
| xfs_errortag_delay((mp), __FILE__, __LINE__, (tag)) | |
| int xfs_errortag_add(struct xfs_mount *mp, unsigned int error_tag); | |
| int xfs_errortag_add_name(struct xfs_mount *mp, const char *tag_name); | |
| void xfs_errortag_copy(struct xfs_mount *dst_mp, struct xfs_mount *src_mp); | |
| int xfs_errortag_clearall(struct xfs_mount *mp); | |
| #else | |
| #define xfs_errortag_init(mp) (0) | |
| #define xfs_errortag_del(mp) | |
| #define XFS_TEST_ERROR(mp, tag) (false) | |
| #define XFS_ERRORTAG_DELAY(mp, tag) ((void)0) | |
| #define xfs_errortag_add(mp, tag) (-ENOSYS) | |
| #define xfs_errortag_copy(dst_mp, src_mp) ((void)0) | |
| #define xfs_errortag_add_name(mp, tag_name) (-ENOSYS) | |
| #define xfs_errortag_clearall(mp) (-ENOSYS) | |
| #endif /* DEBUG */ | |
| /* | |
| * XFS panic tags -- allow a call to xfs_alert_tag() be turned into | |
| * a panic by setting fs.xfs.panic_mask in a sysctl. | |
| */ | |
| #define XFS_NO_PTAG 0u | |
| #define XFS_PTAG_IFLUSH (1u << 0) | |
| #define XFS_PTAG_LOGRES (1u << 1) | |
| #define XFS_PTAG_AILDELETE (1u << 2) | |
| #define XFS_PTAG_ERROR_REPORT (1u << 3) | |
| #define XFS_PTAG_SHUTDOWN_CORRUPT (1u << 4) | |
| #define XFS_PTAG_SHUTDOWN_IOERROR (1u << 5) | |
| #define XFS_PTAG_SHUTDOWN_LOGERROR (1u << 6) | |
| #define XFS_PTAG_FSBLOCK_ZERO (1u << 7) | |
| #define XFS_PTAG_VERIFIER_ERROR (1u << 8) | |
| #define XFS_PTAG_MASK (XFS_PTAG_IFLUSH | \ | |
| XFS_PTAG_LOGRES | \ | |
| XFS_PTAG_AILDELETE | \ | |
| XFS_PTAG_ERROR_REPORT | \ | |
| XFS_PTAG_SHUTDOWN_CORRUPT | \ | |
| XFS_PTAG_SHUTDOWN_IOERROR | \ | |
| XFS_PTAG_SHUTDOWN_LOGERROR | \ | |
| XFS_PTAG_FSBLOCK_ZERO | \ | |
| XFS_PTAG_VERIFIER_ERROR) | |
| #define XFS_PTAG_STRINGS \ | |
| { XFS_NO_PTAG, "none" }, \ | |
| { XFS_PTAG_IFLUSH, "iflush" }, \ | |
| { XFS_PTAG_LOGRES, "logres" }, \ | |
| { XFS_PTAG_AILDELETE, "aildelete" }, \ | |
| { XFS_PTAG_ERROR_REPORT , "error_report" }, \ | |
| { XFS_PTAG_SHUTDOWN_CORRUPT, "corrupt" }, \ | |
| { XFS_PTAG_SHUTDOWN_IOERROR, "ioerror" }, \ | |
| { XFS_PTAG_SHUTDOWN_LOGERROR, "logerror" }, \ | |
| { XFS_PTAG_FSBLOCK_ZERO, "fsb_zero" }, \ | |
| { XFS_PTAG_VERIFIER_ERROR, "verifier" } | |
| #endif /* __XFS_ERROR_H__ */ |