summaryrefslogtreecommitdiffstats
path: root/modules/spl/spl-err.c
blob: 6641ff034d9ef32d8146f8bee89300b3afed9cfd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <sys/sysmacros.h>
#include <sys/cmn_err.h>
#include "config.h"

static char ce_prefix[CE_IGNORE][10] = { "", "NOTICE: ", "WARNING: ", "" };
static char ce_suffix[CE_IGNORE][2] = { "", "\n", "\n", "" };

void
vpanic(const char *fmt, va_list ap)
{
	char msg[MAXMSGLEN];

	vsnprintf(msg, MAXMSGLEN - 1, fmt, ap);
	panic(msg);
} /* vpanic() */
EXPORT_SYMBOL(vpanic);

void
cmn_err(int ce, const char *fmt, ...)
{
	char msg[MAXMSGLEN];
	va_list ap;

	va_start(ap, fmt);
	vsnprintf(msg, MAXMSGLEN - 1, fmt, ap);
	va_end(ap);

	printk("%s", msg);
} /* cmn_err() */
EXPORT_SYMBOL(cmn_err);

void
vcmn_err(int ce, const char *fmt, va_list ap)
{
	char msg[MAXMSGLEN];

        if (ce == CE_PANIC)
                vpanic(fmt, ap);

        if (ce != CE_NOTE) { /* suppress noise in stress testing */
		vsnprintf(msg, MAXMSGLEN - 1, fmt, ap);
		printk("%s%s%s", ce_prefix[ce], msg, ce_suffix[ce]);
        }
} /* vcmn_err() */
EXPORT_SYMBOL(vcmn_err);