xref: /linux/fs/xfs/xfs_message.c (revision 5467b34bd1e81c8e719ae968ba6561723fdc15b8)
10b61f8a4SDave Chinner // SPDX-License-Identifier: GPL-2.0
2c59d87c4SChristoph Hellwig /*
3c59d87c4SChristoph Hellwig  * Copyright (c) 2011 Red Hat, Inc.  All Rights Reserved.
4c59d87c4SChristoph Hellwig  */
5c59d87c4SChristoph Hellwig 
6c59d87c4SChristoph Hellwig #include "xfs.h"
7c59d87c4SChristoph Hellwig #include "xfs_fs.h"
8847f9f68SEric Sandeen #include "xfs_error.h"
9*5467b34bSDarrick J. Wong #include "xfs_shared.h"
104fb6e8adSChristoph Hellwig #include "xfs_format.h"
11239880efSDave Chinner #include "xfs_log_format.h"
12239880efSDave Chinner #include "xfs_trans_resv.h"
13c59d87c4SChristoph Hellwig #include "xfs_mount.h"
14c59d87c4SChristoph Hellwig 
15c59d87c4SChristoph Hellwig /*
16c59d87c4SChristoph Hellwig  * XFS logging functions
17c59d87c4SChristoph Hellwig  */
18c59d87c4SChristoph Hellwig static void
19c59d87c4SChristoph Hellwig __xfs_printk(
20c59d87c4SChristoph Hellwig 	const char		*level,
21c59d87c4SChristoph Hellwig 	const struct xfs_mount	*mp,
22c59d87c4SChristoph Hellwig 	struct va_format	*vaf)
23c59d87c4SChristoph Hellwig {
24c59d87c4SChristoph Hellwig 	if (mp && mp->m_fsname) {
25c59d87c4SChristoph Hellwig 		printk("%sXFS (%s): %pV\n", level, mp->m_fsname, vaf);
26c59d87c4SChristoph Hellwig 		return;
27c59d87c4SChristoph Hellwig 	}
28c59d87c4SChristoph Hellwig 	printk("%sXFS: %pV\n", level, vaf);
29c59d87c4SChristoph Hellwig }
30c59d87c4SChristoph Hellwig 
31c59d87c4SChristoph Hellwig #define define_xfs_printk_level(func, kern_level)		\
32c59d87c4SChristoph Hellwig void func(const struct xfs_mount *mp, const char *fmt, ...)	\
33c59d87c4SChristoph Hellwig {								\
34c59d87c4SChristoph Hellwig 	struct va_format	vaf;				\
35c59d87c4SChristoph Hellwig 	va_list			args;				\
36847f9f68SEric Sandeen 	int			level;				\
37c59d87c4SChristoph Hellwig 								\
38c59d87c4SChristoph Hellwig 	va_start(args, fmt);					\
39c59d87c4SChristoph Hellwig 								\
40c59d87c4SChristoph Hellwig 	vaf.fmt = fmt;						\
41c59d87c4SChristoph Hellwig 	vaf.va = &args;						\
42c59d87c4SChristoph Hellwig 								\
43c59d87c4SChristoph Hellwig 	__xfs_printk(kern_level, mp, &vaf);			\
44c59d87c4SChristoph Hellwig 	va_end(args);						\
45847f9f68SEric Sandeen 								\
46847f9f68SEric Sandeen 	if (!kstrtoint(kern_level, 0, &level) &&		\
47847f9f68SEric Sandeen 	    level <= LOGLEVEL_ERR &&				\
48847f9f68SEric Sandeen 	    xfs_error_level >= XFS_ERRLEVEL_HIGH)		\
49847f9f68SEric Sandeen 		xfs_stack_trace();				\
50c59d87c4SChristoph Hellwig }								\
51c59d87c4SChristoph Hellwig 
52c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_emerg, KERN_EMERG);
53c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_alert, KERN_ALERT);
54c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_crit, KERN_CRIT);
55c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_err, KERN_ERR);
56c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_warn, KERN_WARNING);
57c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_notice, KERN_NOTICE);
58c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_info, KERN_INFO);
59c59d87c4SChristoph Hellwig #ifdef DEBUG
60c59d87c4SChristoph Hellwig define_xfs_printk_level(xfs_debug, KERN_DEBUG);
61c59d87c4SChristoph Hellwig #endif
62c59d87c4SChristoph Hellwig 
63c59d87c4SChristoph Hellwig void
64c59d87c4SChristoph Hellwig xfs_alert_tag(
65c59d87c4SChristoph Hellwig 	const struct xfs_mount	*mp,
66c59d87c4SChristoph Hellwig 	int			panic_tag,
67c59d87c4SChristoph Hellwig 	const char		*fmt, ...)
68c59d87c4SChristoph Hellwig {
69c59d87c4SChristoph Hellwig 	struct va_format	vaf;
70c59d87c4SChristoph Hellwig 	va_list			args;
71c59d87c4SChristoph Hellwig 	int			do_panic = 0;
72c59d87c4SChristoph Hellwig 
73c59d87c4SChristoph Hellwig 	if (xfs_panic_mask && (xfs_panic_mask & panic_tag)) {
74c59d87c4SChristoph Hellwig 		xfs_alert(mp, "Transforming an alert into a BUG.");
75c59d87c4SChristoph Hellwig 		do_panic = 1;
76c59d87c4SChristoph Hellwig 	}
77c59d87c4SChristoph Hellwig 
78c59d87c4SChristoph Hellwig 	va_start(args, fmt);
79c59d87c4SChristoph Hellwig 
80c59d87c4SChristoph Hellwig 	vaf.fmt = fmt;
81c59d87c4SChristoph Hellwig 	vaf.va = &args;
82c59d87c4SChristoph Hellwig 
83c59d87c4SChristoph Hellwig 	__xfs_printk(KERN_ALERT, mp, &vaf);
84c59d87c4SChristoph Hellwig 	va_end(args);
85c59d87c4SChristoph Hellwig 
86c59d87c4SChristoph Hellwig 	BUG_ON(do_panic);
87c59d87c4SChristoph Hellwig }
88c59d87c4SChristoph Hellwig 
89c59d87c4SChristoph Hellwig void
90742ae1e3SDave Chinner asswarn(char *expr, char *file, int line)
91742ae1e3SDave Chinner {
92742ae1e3SDave Chinner 	xfs_warn(NULL, "Assertion failed: %s, file: %s, line: %d",
93742ae1e3SDave Chinner 		expr, file, line);
94742ae1e3SDave Chinner 	WARN_ON(1);
95742ae1e3SDave Chinner }
96742ae1e3SDave Chinner 
97742ae1e3SDave Chinner void
98c59d87c4SChristoph Hellwig assfail(char *expr, char *file, int line)
99c59d87c4SChristoph Hellwig {
100c59d87c4SChristoph Hellwig 	xfs_emerg(NULL, "Assertion failed: %s, file: %s, line: %d",
101c59d87c4SChristoph Hellwig 		expr, file, line);
102ccdab3d6SBrian Foster 	if (xfs_globals.bug_on_assert)
103c59d87c4SChristoph Hellwig 		BUG();
104ccdab3d6SBrian Foster 	else
105ccdab3d6SBrian Foster 		WARN_ON(1);
106c59d87c4SChristoph Hellwig }
107c59d87c4SChristoph Hellwig 
108c59d87c4SChristoph Hellwig void
109c59d87c4SChristoph Hellwig xfs_hex_dump(void *p, int length)
110c59d87c4SChristoph Hellwig {
111bdec055bSDarrick J. Wong 	print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_OFFSET, 16, 1, p, length, 1);
112c59d87c4SChristoph Hellwig }
113