xref: /linux/fs/xfs/xfs_message.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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"
95467b34bSDarrick J. Wong #include "xfs_shared.h"
104fb6e8adSChristoph Hellwig #include "xfs_format.h"
11239880efSDave Chinner #include "xfs_trans_resv.h"
12c59d87c4SChristoph Hellwig #include "xfs_mount.h"
13c59d87c4SChristoph Hellwig 
14c59d87c4SChristoph Hellwig /*
15c59d87c4SChristoph Hellwig  * XFS logging functions
16c59d87c4SChristoph Hellwig  */
17c59d87c4SChristoph Hellwig static void
__xfs_printk(const char * level,const struct xfs_mount * mp,struct va_format * vaf)18c59d87c4SChristoph Hellwig __xfs_printk(
19c59d87c4SChristoph Hellwig 	const char		*level,
20c59d87c4SChristoph Hellwig 	const struct xfs_mount	*mp,
21c59d87c4SChristoph Hellwig 	struct va_format	*vaf)
22c59d87c4SChristoph Hellwig {
23e1d3d218SIan Kent 	if (mp && mp->m_super) {
24e1d3d218SIan Kent 		printk("%sXFS (%s): %pV\n", level, mp->m_super->s_id, vaf);
25c59d87c4SChristoph Hellwig 		return;
26c59d87c4SChristoph Hellwig 	}
27c59d87c4SChristoph Hellwig 	printk("%sXFS: %pV\n", level, vaf);
28c59d87c4SChristoph Hellwig }
29c59d87c4SChristoph Hellwig 
30e60aa787SJonathan Lassoff void
xfs_printk_level(const char * kern_level,const struct xfs_mount * mp,const char * fmt,...)31e60aa787SJonathan Lassoff xfs_printk_level(
32e60aa787SJonathan Lassoff 	const char *kern_level,
33e60aa787SJonathan Lassoff 	const struct xfs_mount *mp,
34e60aa787SJonathan Lassoff 	const char *fmt, ...)
35e60aa787SJonathan Lassoff {
36e60aa787SJonathan Lassoff 	struct va_format	vaf;
37e60aa787SJonathan Lassoff 	va_list			args;
38e60aa787SJonathan Lassoff 	int			level;
39c59d87c4SChristoph Hellwig 
40e60aa787SJonathan Lassoff 	va_start(args, fmt);
41e60aa787SJonathan Lassoff 	vaf.fmt = fmt;
42e60aa787SJonathan Lassoff 	vaf.va = &args;
43e60aa787SJonathan Lassoff 
44e60aa787SJonathan Lassoff 	__xfs_printk(kern_level, mp, &vaf);
45e60aa787SJonathan Lassoff 
46e60aa787SJonathan Lassoff 	va_end(args);
47e60aa787SJonathan Lassoff 
48e60aa787SJonathan Lassoff 	if (!kstrtoint(kern_level, 0, &level) &&
49e60aa787SJonathan Lassoff 	    level <= LOGLEVEL_ERR &&
50e60aa787SJonathan Lassoff 	    xfs_error_level >= XFS_ERRLEVEL_HIGH)
51e60aa787SJonathan Lassoff 		xfs_stack_trace();
52e60aa787SJonathan Lassoff }
53c59d87c4SChristoph Hellwig 
54c59d87c4SChristoph Hellwig void
_xfs_alert_tag(const struct xfs_mount * mp,uint32_t panic_tag,const char * fmt,...)55e2703569SJonathan Lassoff _xfs_alert_tag(
56c59d87c4SChristoph Hellwig 	const struct xfs_mount	*mp,
57*90215d74SDave Chinner 	uint32_t		panic_tag,
58c59d87c4SChristoph Hellwig 	const char		*fmt, ...)
59c59d87c4SChristoph Hellwig {
60c59d87c4SChristoph Hellwig 	struct va_format	vaf;
61c59d87c4SChristoph Hellwig 	va_list			args;
62c59d87c4SChristoph Hellwig 	int			do_panic = 0;
63c59d87c4SChristoph Hellwig 
64c59d87c4SChristoph Hellwig 	if (xfs_panic_mask && (xfs_panic_mask & panic_tag)) {
65c59d87c4SChristoph Hellwig 		xfs_alert(mp, "Transforming an alert into a BUG.");
66c59d87c4SChristoph Hellwig 		do_panic = 1;
67c59d87c4SChristoph Hellwig 	}
68c59d87c4SChristoph Hellwig 
69c59d87c4SChristoph Hellwig 	va_start(args, fmt);
70c59d87c4SChristoph Hellwig 
71c59d87c4SChristoph Hellwig 	vaf.fmt = fmt;
72c59d87c4SChristoph Hellwig 	vaf.va = &args;
73c59d87c4SChristoph Hellwig 
74c59d87c4SChristoph Hellwig 	__xfs_printk(KERN_ALERT, mp, &vaf);
75c59d87c4SChristoph Hellwig 	va_end(args);
76c59d87c4SChristoph Hellwig 
77c59d87c4SChristoph Hellwig 	BUG_ON(do_panic);
78c59d87c4SChristoph Hellwig }
79c59d87c4SChristoph Hellwig 
80c59d87c4SChristoph Hellwig void
asswarn(struct xfs_mount * mp,char * expr,char * file,int line)819842b56cSDarrick J. Wong asswarn(
829842b56cSDarrick J. Wong 	struct xfs_mount	*mp,
839842b56cSDarrick J. Wong 	char			*expr,
849842b56cSDarrick J. Wong 	char			*file,
859842b56cSDarrick J. Wong 	int			line)
86742ae1e3SDave Chinner {
879842b56cSDarrick J. Wong 	xfs_warn(mp, "Assertion failed: %s, file: %s, line: %d",
88742ae1e3SDave Chinner 		expr, file, line);
89742ae1e3SDave Chinner 	WARN_ON(1);
90742ae1e3SDave Chinner }
91742ae1e3SDave Chinner 
92742ae1e3SDave Chinner void
assfail(struct xfs_mount * mp,char * expr,char * file,int line)939842b56cSDarrick J. Wong assfail(
949842b56cSDarrick J. Wong 	struct xfs_mount	*mp,
959842b56cSDarrick J. Wong 	char			*expr,
969842b56cSDarrick J. Wong 	char			*file,
979842b56cSDarrick J. Wong 	int			line)
98c59d87c4SChristoph Hellwig {
999842b56cSDarrick J. Wong 	xfs_emerg(mp, "Assertion failed: %s, file: %s, line: %d",
100c59d87c4SChristoph Hellwig 		expr, file, line);
101ccdab3d6SBrian Foster 	if (xfs_globals.bug_on_assert)
102c59d87c4SChristoph Hellwig 		BUG();
103ccdab3d6SBrian Foster 	else
104ccdab3d6SBrian Foster 		WARN_ON(1);
105c59d87c4SChristoph Hellwig }
106c59d87c4SChristoph Hellwig 
107c59d87c4SChristoph Hellwig void
xfs_hex_dump(const void * p,int length)108d243b89aSDarrick J. Wong xfs_hex_dump(const void *p, int length)
109c59d87c4SChristoph Hellwig {
110bdec055bSDarrick J. Wong 	print_hex_dump(KERN_ALERT, "", DUMP_PREFIX_OFFSET, 16, 1, p, length, 1);
111c59d87c4SChristoph Hellwig }
112f9bccfccSBrian Foster 
113f9bccfccSBrian Foster void
xfs_buf_alert_ratelimited(struct xfs_buf * bp,const char * rlmsg,const char * fmt,...)114f9bccfccSBrian Foster xfs_buf_alert_ratelimited(
115f9bccfccSBrian Foster 	struct xfs_buf		*bp,
116f9bccfccSBrian Foster 	const char		*rlmsg,
117f9bccfccSBrian Foster 	const char		*fmt,
118f9bccfccSBrian Foster 	...)
119f9bccfccSBrian Foster {
120f9bccfccSBrian Foster 	struct xfs_mount	*mp = bp->b_mount;
121f9bccfccSBrian Foster 	struct va_format	vaf;
122f9bccfccSBrian Foster 	va_list			args;
123f9bccfccSBrian Foster 
124f9bccfccSBrian Foster 	/* use the more aggressive per-target rate limit for buffers */
125f9bccfccSBrian Foster 	if (!___ratelimit(&bp->b_target->bt_ioerror_rl, rlmsg))
126f9bccfccSBrian Foster 		return;
127f9bccfccSBrian Foster 
128f9bccfccSBrian Foster 	va_start(args, fmt);
129f9bccfccSBrian Foster 	vaf.fmt = fmt;
130f9bccfccSBrian Foster 	vaf.va = &args;
131f9bccfccSBrian Foster 	__xfs_printk(KERN_ALERT, mp, &vaf);
132f9bccfccSBrian Foster 	va_end(args);
133f9bccfccSBrian Foster }
134