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