messages.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef BTRFS_MESSAGES_H
  3. #define BTRFS_MESSAGES_H
  4. #include <linux/types.h>
  5. #include <linux/printk.h>
  6. #include <linux/bug.h>
  7. struct btrfs_fs_info;
  8. /*
  9. * We want to be able to override this in btrfs-progs.
  10. */
  11. #ifdef __KERNEL__
  12. static inline __printf(2, 3) __cold
  13. void btrfs_no_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
  14. {
  15. }
  16. #endif
  17. #ifdef CONFIG_PRINTK
  18. #define btrfs_printk(fs_info, fmt, args...) \
  19. _btrfs_printk(fs_info, fmt, ##args)
  20. __printf(2, 3)
  21. __cold
  22. void _btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...);
  23. #else
  24. #define btrfs_printk(fs_info, fmt, args...) \
  25. btrfs_no_printk(fs_info, fmt, ##args)
  26. #endif
  27. #define btrfs_emerg(fs_info, fmt, args...) \
  28. btrfs_printk(fs_info, KERN_EMERG fmt, ##args)
  29. #define btrfs_alert(fs_info, fmt, args...) \
  30. btrfs_printk(fs_info, KERN_ALERT fmt, ##args)
  31. #define btrfs_crit(fs_info, fmt, args...) \
  32. btrfs_printk(fs_info, KERN_CRIT fmt, ##args)
  33. #define btrfs_err(fs_info, fmt, args...) \
  34. btrfs_printk(fs_info, KERN_ERR fmt, ##args)
  35. #define btrfs_warn(fs_info, fmt, args...) \
  36. btrfs_printk(fs_info, KERN_WARNING fmt, ##args)
  37. #define btrfs_notice(fs_info, fmt, args...) \
  38. btrfs_printk(fs_info, KERN_NOTICE fmt, ##args)
  39. #define btrfs_info(fs_info, fmt, args...) \
  40. btrfs_printk(fs_info, KERN_INFO fmt, ##args)
  41. /*
  42. * Wrappers that use printk_in_rcu
  43. */
  44. #define btrfs_emerg_in_rcu(fs_info, fmt, args...) \
  45. btrfs_printk_in_rcu(fs_info, KERN_EMERG fmt, ##args)
  46. #define btrfs_alert_in_rcu(fs_info, fmt, args...) \
  47. btrfs_printk_in_rcu(fs_info, KERN_ALERT fmt, ##args)
  48. #define btrfs_crit_in_rcu(fs_info, fmt, args...) \
  49. btrfs_printk_in_rcu(fs_info, KERN_CRIT fmt, ##args)
  50. #define btrfs_err_in_rcu(fs_info, fmt, args...) \
  51. btrfs_printk_in_rcu(fs_info, KERN_ERR fmt, ##args)
  52. #define btrfs_warn_in_rcu(fs_info, fmt, args...) \
  53. btrfs_printk_in_rcu(fs_info, KERN_WARNING fmt, ##args)
  54. #define btrfs_notice_in_rcu(fs_info, fmt, args...) \
  55. btrfs_printk_in_rcu(fs_info, KERN_NOTICE fmt, ##args)
  56. #define btrfs_info_in_rcu(fs_info, fmt, args...) \
  57. btrfs_printk_in_rcu(fs_info, KERN_INFO fmt, ##args)
  58. /*
  59. * Wrappers that use a ratelimited printk_in_rcu
  60. */
  61. #define btrfs_emerg_rl_in_rcu(fs_info, fmt, args...) \
  62. btrfs_printk_rl_in_rcu(fs_info, KERN_EMERG fmt, ##args)
  63. #define btrfs_alert_rl_in_rcu(fs_info, fmt, args...) \
  64. btrfs_printk_rl_in_rcu(fs_info, KERN_ALERT fmt, ##args)
  65. #define btrfs_crit_rl_in_rcu(fs_info, fmt, args...) \
  66. btrfs_printk_rl_in_rcu(fs_info, KERN_CRIT fmt, ##args)
  67. #define btrfs_err_rl_in_rcu(fs_info, fmt, args...) \
  68. btrfs_printk_rl_in_rcu(fs_info, KERN_ERR fmt, ##args)
  69. #define btrfs_warn_rl_in_rcu(fs_info, fmt, args...) \
  70. btrfs_printk_rl_in_rcu(fs_info, KERN_WARNING fmt, ##args)
  71. #define btrfs_notice_rl_in_rcu(fs_info, fmt, args...) \
  72. btrfs_printk_rl_in_rcu(fs_info, KERN_NOTICE fmt, ##args)
  73. #define btrfs_info_rl_in_rcu(fs_info, fmt, args...) \
  74. btrfs_printk_rl_in_rcu(fs_info, KERN_INFO fmt, ##args)
  75. /*
  76. * Wrappers that use a ratelimited printk
  77. */
  78. #define btrfs_emerg_rl(fs_info, fmt, args...) \
  79. btrfs_printk_ratelimited(fs_info, KERN_EMERG fmt, ##args)
  80. #define btrfs_alert_rl(fs_info, fmt, args...) \
  81. btrfs_printk_ratelimited(fs_info, KERN_ALERT fmt, ##args)
  82. #define btrfs_crit_rl(fs_info, fmt, args...) \
  83. btrfs_printk_ratelimited(fs_info, KERN_CRIT fmt, ##args)
  84. #define btrfs_err_rl(fs_info, fmt, args...) \
  85. btrfs_printk_ratelimited(fs_info, KERN_ERR fmt, ##args)
  86. #define btrfs_warn_rl(fs_info, fmt, args...) \
  87. btrfs_printk_ratelimited(fs_info, KERN_WARNING fmt, ##args)
  88. #define btrfs_notice_rl(fs_info, fmt, args...) \
  89. btrfs_printk_ratelimited(fs_info, KERN_NOTICE fmt, ##args)
  90. #define btrfs_info_rl(fs_info, fmt, args...) \
  91. btrfs_printk_ratelimited(fs_info, KERN_INFO fmt, ##args)
  92. #if defined(CONFIG_DYNAMIC_DEBUG)
  93. #define btrfs_debug(fs_info, fmt, args...) \
  94. _dynamic_func_call_no_desc(fmt, btrfs_printk, \
  95. fs_info, KERN_DEBUG fmt, ##args)
  96. #define btrfs_debug_in_rcu(fs_info, fmt, args...) \
  97. _dynamic_func_call_no_desc(fmt, btrfs_printk_in_rcu, \
  98. fs_info, KERN_DEBUG fmt, ##args)
  99. #define btrfs_debug_rl_in_rcu(fs_info, fmt, args...) \
  100. _dynamic_func_call_no_desc(fmt, btrfs_printk_rl_in_rcu, \
  101. fs_info, KERN_DEBUG fmt, ##args)
  102. #define btrfs_debug_rl(fs_info, fmt, args...) \
  103. _dynamic_func_call_no_desc(fmt, btrfs_printk_ratelimited, \
  104. fs_info, KERN_DEBUG fmt, ##args)
  105. #elif defined(DEBUG)
  106. #define btrfs_debug(fs_info, fmt, args...) \
  107. btrfs_printk(fs_info, KERN_DEBUG fmt, ##args)
  108. #define btrfs_debug_in_rcu(fs_info, fmt, args...) \
  109. btrfs_printk_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
  110. #define btrfs_debug_rl_in_rcu(fs_info, fmt, args...) \
  111. btrfs_printk_rl_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
  112. #define btrfs_debug_rl(fs_info, fmt, args...) \
  113. btrfs_printk_ratelimited(fs_info, KERN_DEBUG fmt, ##args)
  114. #else
  115. #define btrfs_debug(fs_info, fmt, args...) \
  116. btrfs_no_printk(fs_info, KERN_DEBUG fmt, ##args)
  117. #define btrfs_debug_in_rcu(fs_info, fmt, args...) \
  118. btrfs_no_printk_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
  119. #define btrfs_debug_rl_in_rcu(fs_info, fmt, args...) \
  120. btrfs_no_printk_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
  121. #define btrfs_debug_rl(fs_info, fmt, args...) \
  122. btrfs_no_printk(fs_info, KERN_DEBUG fmt, ##args)
  123. #endif
  124. #define btrfs_printk_in_rcu(fs_info, fmt, args...) \
  125. do { \
  126. rcu_read_lock(); \
  127. btrfs_printk(fs_info, fmt, ##args); \
  128. rcu_read_unlock(); \
  129. } while (0)
  130. #define btrfs_no_printk_in_rcu(fs_info, fmt, args...) \
  131. do { \
  132. rcu_read_lock(); \
  133. btrfs_no_printk(fs_info, fmt, ##args); \
  134. rcu_read_unlock(); \
  135. } while (0)
  136. #define btrfs_printk_ratelimited(fs_info, fmt, args...) \
  137. do { \
  138. static DEFINE_RATELIMIT_STATE(_rs, \
  139. DEFAULT_RATELIMIT_INTERVAL, \
  140. DEFAULT_RATELIMIT_BURST); \
  141. if (__ratelimit(&_rs)) \
  142. btrfs_printk(fs_info, fmt, ##args); \
  143. } while (0)
  144. #define btrfs_printk_rl_in_rcu(fs_info, fmt, args...) \
  145. do { \
  146. rcu_read_lock(); \
  147. btrfs_printk_ratelimited(fs_info, fmt, ##args); \
  148. rcu_read_unlock(); \
  149. } while (0)
  150. #ifdef CONFIG_BTRFS_ASSERT
  151. #define btrfs_assertfail(expr, file, line) ({ \
  152. pr_err("assertion failed: %s, in %s:%d\n", (expr), (file), (line)); \
  153. BUG(); \
  154. })
  155. #define ASSERT(expr) \
  156. (likely(expr) ? (void)0 : btrfs_assertfail(#expr, __FILE__, __LINE__))
  157. #else
  158. #define ASSERT(expr) (void)(expr)
  159. #endif
  160. __printf(5, 6)
  161. __cold
  162. void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function,
  163. unsigned int line, int error, const char *fmt, ...);
  164. const char * __attribute_const__ btrfs_decode_error(int error);
  165. #define btrfs_handle_fs_error(fs_info, error, fmt, args...) \
  166. __btrfs_handle_fs_error((fs_info), __func__, __LINE__, \
  167. (error), fmt, ##args)
  168. __printf(5, 6)
  169. __cold
  170. void __btrfs_panic(const struct btrfs_fs_info *fs_info, const char *function,
  171. unsigned int line, int error, const char *fmt, ...);
  172. /*
  173. * If BTRFS_MOUNT_PANIC_ON_FATAL_ERROR is in mount_opt, __btrfs_panic
  174. * will panic(). Otherwise we BUG() here.
  175. */
  176. #define btrfs_panic(fs_info, error, fmt, args...) \
  177. do { \
  178. __btrfs_panic(fs_info, __func__, __LINE__, error, fmt, ##args); \
  179. BUG(); \
  180. } while (0)
  181. #if BITS_PER_LONG == 32
  182. #define BTRFS_32BIT_MAX_FILE_SIZE (((u64)ULONG_MAX + 1) << PAGE_SHIFT)
  183. /*
  184. * The warning threshold is 5/8th of the MAX_LFS_FILESIZE that limits the logical
  185. * addresses of extents.
  186. *
  187. * For 4K page size it's about 10T, for 64K it's 160T.
  188. */
  189. #define BTRFS_32BIT_EARLY_WARN_THRESHOLD (BTRFS_32BIT_MAX_FILE_SIZE * 5 / 8)
  190. void btrfs_warn_32bit_limit(struct btrfs_fs_info *fs_info);
  191. void btrfs_err_32bit_limit(struct btrfs_fs_info *fs_info);
  192. #endif
  193. #endif