xfs_error.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. struct xfs_mount;
  9. void xfs_error_report(const char *tag, int level, struct xfs_mount *mp,
  10. const char *filename, int linenum, xfs_failaddr_t failaddr);
  11. void xfs_corruption_error(const char *tag, int level, struct xfs_mount *mp,
  12. const void *buf, size_t bufsize, const char *filename,
  13. int linenum, xfs_failaddr_t failaddr);
  14. void xfs_buf_corruption_error(struct xfs_buf *bp, xfs_failaddr_t fa);
  15. void xfs_buf_verifier_error(struct xfs_buf *bp, int error, const char *name,
  16. const void *buf, size_t bufsz, xfs_failaddr_t failaddr);
  17. void xfs_verifier_error(struct xfs_buf *bp, int error, xfs_failaddr_t failaddr);
  18. void xfs_inode_verifier_error(struct xfs_inode *ip, int error, const char *name,
  19. const void *buf, size_t bufsz, xfs_failaddr_t failaddr);
  20. #define XFS_ERROR_REPORT(e, lvl, mp) \
  21. xfs_error_report(e, lvl, mp, __FILE__, __LINE__, __return_address)
  22. #define XFS_CORRUPTION_ERROR(e, lvl, mp, buf, bufsize) \
  23. xfs_corruption_error(e, lvl, mp, buf, bufsize, \
  24. __FILE__, __LINE__, __return_address)
  25. #define XFS_ERRLEVEL_OFF 0
  26. #define XFS_ERRLEVEL_LOW 1
  27. #define XFS_ERRLEVEL_HIGH 5
  28. /* Dump 128 bytes of any corrupt buffer */
  29. #define XFS_CORRUPTION_DUMP_LEN (128)
  30. #ifdef DEBUG
  31. int xfs_errortag_init(struct xfs_mount *mp);
  32. void xfs_errortag_del(struct xfs_mount *mp);
  33. bool xfs_errortag_test(struct xfs_mount *mp, const char *file, int line,
  34. unsigned int error_tag);
  35. #define XFS_TEST_ERROR(mp, tag) \
  36. xfs_errortag_test((mp), __FILE__, __LINE__, (tag))
  37. void xfs_errortag_delay(struct xfs_mount *mp, const char *file, int line,
  38. unsigned int error_tag);
  39. #define XFS_ERRORTAG_DELAY(mp, tag) \
  40. xfs_errortag_delay((mp), __FILE__, __LINE__, (tag))
  41. int xfs_errortag_add(struct xfs_mount *mp, unsigned int error_tag);
  42. int xfs_errortag_add_name(struct xfs_mount *mp, const char *tag_name);
  43. void xfs_errortag_copy(struct xfs_mount *dst_mp, struct xfs_mount *src_mp);
  44. int xfs_errortag_clearall(struct xfs_mount *mp);
  45. #else
  46. #define xfs_errortag_init(mp) (0)
  47. #define xfs_errortag_del(mp)
  48. #define XFS_TEST_ERROR(mp, tag) (false)
  49. #define XFS_ERRORTAG_DELAY(mp, tag) ((void)0)
  50. #define xfs_errortag_add(mp, tag) (-ENOSYS)
  51. #define xfs_errortag_copy(dst_mp, src_mp) ((void)0)
  52. #define xfs_errortag_add_name(mp, tag_name) (-ENOSYS)
  53. #define xfs_errortag_clearall(mp) (-ENOSYS)
  54. #endif /* DEBUG */
  55. /*
  56. * XFS panic tags -- allow a call to xfs_alert_tag() be turned into
  57. * a panic by setting fs.xfs.panic_mask in a sysctl.
  58. */
  59. #define XFS_NO_PTAG 0u
  60. #define XFS_PTAG_IFLUSH (1u << 0)
  61. #define XFS_PTAG_LOGRES (1u << 1)
  62. #define XFS_PTAG_AILDELETE (1u << 2)
  63. #define XFS_PTAG_ERROR_REPORT (1u << 3)
  64. #define XFS_PTAG_SHUTDOWN_CORRUPT (1u << 4)
  65. #define XFS_PTAG_SHUTDOWN_IOERROR (1u << 5)
  66. #define XFS_PTAG_SHUTDOWN_LOGERROR (1u << 6)
  67. #define XFS_PTAG_FSBLOCK_ZERO (1u << 7)
  68. #define XFS_PTAG_VERIFIER_ERROR (1u << 8)
  69. #define XFS_PTAG_MASK (XFS_PTAG_IFLUSH | \
  70. XFS_PTAG_LOGRES | \
  71. XFS_PTAG_AILDELETE | \
  72. XFS_PTAG_ERROR_REPORT | \
  73. XFS_PTAG_SHUTDOWN_CORRUPT | \
  74. XFS_PTAG_SHUTDOWN_IOERROR | \
  75. XFS_PTAG_SHUTDOWN_LOGERROR | \
  76. XFS_PTAG_FSBLOCK_ZERO | \
  77. XFS_PTAG_VERIFIER_ERROR)
  78. #define XFS_PTAG_STRINGS \
  79. { XFS_NO_PTAG, "none" }, \
  80. { XFS_PTAG_IFLUSH, "iflush" }, \
  81. { XFS_PTAG_LOGRES, "logres" }, \
  82. { XFS_PTAG_AILDELETE, "aildelete" }, \
  83. { XFS_PTAG_ERROR_REPORT , "error_report" }, \
  84. { XFS_PTAG_SHUTDOWN_CORRUPT, "corrupt" }, \
  85. { XFS_PTAG_SHUTDOWN_IOERROR, "ioerror" }, \
  86. { XFS_PTAG_SHUTDOWN_LOGERROR, "logerror" }, \
  87. { XFS_PTAG_FSBLOCK_ZERO, "fsb_zero" }, \
  88. { XFS_PTAG_VERIFIER_ERROR, "verifier" }
  89. #endif /* __XFS_ERROR_H__ */