xfs_message.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2011 Red Hat, Inc. All Rights Reserved.
  4. */
  5. #include "xfs.h"
  6. #include "xfs_fs.h"
  7. #include "xfs_error.h"
  8. #include "xfs_format.h"
  9. #include "xfs_log_format.h"
  10. #include "xfs_trans_resv.h"
  11. #include "xfs_mount.h"
  12. /*
  13. * XFS logging functions
  14. */
  15. static void
  16. __xfs_printk(
  17. const char *level,
  18. const struct xfs_mount *mp,
  19. struct va_format *vaf)
  20. {
  21. if (mp && mp->m_fsname) {
  22. printk("%sXFS (%s): %pV\n", level, mp->m_fsname, vaf);
  23. return;
  24. }
  25. printk("%sXFS: %pV\n", level, vaf);
  26. }
  27. #define define_xfs_printk_level(func, kern_level) \
  28. void func(const struct xfs_mount *mp, const char *fmt, ...) \
  29. { \
  30. struct va_format vaf; \
  31. va_list args; \
  32. int level; \
  33. \
  34. va_start(args, fmt); \
  35. \
  36. vaf.fmt = fmt; \
  37. vaf.va = &args; \
  38. \
  39. __xfs_printk(kern_level, mp, &vaf); \
  40. va_end(args); \
  41. \
  42. if (!kstrtoint(kern_level, 0, &level) && \
  43. level <= LOGLEVEL_ERR && \
  44. xfs_error_level >= XFS_ERRLEVEL_HIGH) \
  45. xfs_stack_trace(); \
  46. } \
  47. define_xfs_printk_level(xfs_emerg, KERN_EMERG);
  48. define_xfs_printk_level(xfs_alert, KERN_ALERT);
  49. define_xfs_printk_level(xfs_crit, KERN_CRIT);
  50. define_xfs_printk_level(xfs_err, KERN_ERR);
  51. define_xfs_printk_level(xfs_warn, KERN_WARNING);
  52. define_xfs_printk_level(xfs_notice, KERN_NOTICE);
  53. define_xfs_printk_level(xfs_info, KERN_INFO);
  54. #ifdef DEBUG
  55. define_xfs_printk_level(xfs_debug, KERN_DEBUG);
  56. #endif
  57. void
  58. xfs_alert_tag(
  59. const struct xfs_mount *mp,
  60. int panic_tag,
  61. const char *fmt, ...)
  62. {
  63. struct va_format vaf;
  64. va_list args;
  65. int do_panic = 0;
  66. if (xfs_panic_mask && (xfs_panic_mask & panic_tag)) {
  67. xfs_alert(mp, "Transforming an alert into a BUG.");
  68. do_panic = 1;
  69. }
  70. va_start(args, fmt);
  71. vaf.fmt = fmt;
  72. vaf.va = &args;
  73. __xfs_printk(KERN_ALERT, mp, &vaf);
  74. va_end(args);
  75. BUG_ON(do_panic);
  76. }
  77. void
  78. asswarn(char *expr, char *file, int line)
  79. {
  80. xfs_warn(NULL, "Assertion failed: %s, file: %s, line: %d",
  81. expr, file, line);
  82. WARN_ON(1);
  83. }
  84. void
  85. assfail(char *expr, char *file, int line)
  86. {
  87. xfs_emerg(NULL, "Assertion failed: %s, file: %s, line: %d",
  88. expr, file, line);
  89. if (xfs_globals.bug_on_assert)
  90. BUG();
  91. else
  92. WARN_ON(1);
  93. }
  94. void
  95. xfs_hex_dump(void *p, int length)
  96. {
  97. print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_ADDRESS, 16, 1, p, length, 1);
  98. }