module/zfs: remove zfs_zevent_console and zfs_zevent_cols
zfs_zevent_console committed multiple printk()s per line without properly continuing them ‒ a single event could easily be fragmented across over thirty lines, making it useless for direct application zfs_zevent_cols exists purely to wrap the output from zfs_zevent_console The niche this was supposed to fill can be better served by something akin to the all-syslog ZEDLET Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #7082 Closes #11996
This commit is contained in:
parent
2babd20045
commit
38c6d6cedd
|
@ -8,7 +8,6 @@ KERNEL_H = \
|
||||||
ccompile.h \
|
ccompile.h \
|
||||||
cmn_err.h \
|
cmn_err.h \
|
||||||
condvar.h \
|
condvar.h \
|
||||||
console.h \
|
|
||||||
cred.h \
|
cred.h \
|
||||||
ctype.h \
|
ctype.h \
|
||||||
debug.h \
|
debug.h \
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2020 iXsystems, Inc.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
* $FreeBSD$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _SPL_CONSOLE_H
|
|
||||||
#define _SPL_CONSOLE_H
|
|
||||||
|
|
||||||
#define console_vprintf vprintf
|
|
||||||
#define console_printf printf
|
|
||||||
|
|
||||||
#endif /* _SPL_CONSOLE_H */
|
|
|
@ -6,7 +6,6 @@ KERNEL_H = \
|
||||||
callo.h \
|
callo.h \
|
||||||
cmn_err.h \
|
cmn_err.h \
|
||||||
condvar.h \
|
condvar.h \
|
||||||
console.h \
|
|
||||||
cred.h \
|
cred.h \
|
||||||
ctype.h \
|
ctype.h \
|
||||||
debug.h \
|
debug.h \
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC.
|
|
||||||
* Copyright (C) 2007 The Regents of the University of California.
|
|
||||||
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
|
|
||||||
* Written by Brian Behlendorf <behlendorf1@llnl.gov>.
|
|
||||||
* UCRL-CODE-235197
|
|
||||||
*
|
|
||||||
* This file is part of the SPL, Solaris Porting Layer.
|
|
||||||
*
|
|
||||||
* The SPL is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the
|
|
||||||
* Free Software Foundation; either version 2 of the License, or (at your
|
|
||||||
* option) any later version.
|
|
||||||
*
|
|
||||||
* The SPL is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
* for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along
|
|
||||||
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _SPL_CONSOLE_H
|
|
||||||
#define _SPL_CONSOLE_H
|
|
||||||
|
|
||||||
#define console_vprintf vprintk
|
|
||||||
#define console_printf printk
|
|
||||||
|
|
||||||
#endif /* _SPL_CONSOLE_H */
|
|
|
@ -92,7 +92,6 @@ typedef struct zfs_zevent {
|
||||||
|
|
||||||
extern void fm_init(void);
|
extern void fm_init(void);
|
||||||
extern void fm_fini(void);
|
extern void fm_fini(void);
|
||||||
extern void fm_nvprint(nvlist_t *);
|
|
||||||
extern void zfs_zevent_post_cb(nvlist_t *nvl, nvlist_t *detector);
|
extern void zfs_zevent_post_cb(nvlist_t *nvl, nvlist_t *detector);
|
||||||
extern int zfs_zevent_post(nvlist_t *, nvlist_t *, zevent_cb_t *);
|
extern int zfs_zevent_post(nvlist_t *, nvlist_t *, zevent_cb_t *);
|
||||||
extern void zfs_zevent_drain_all(int *);
|
extern void zfs_zevent_drain_all(int *);
|
||||||
|
|
|
@ -3847,28 +3847,6 @@ set.
|
||||||
.sp
|
.sp
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.sp
|
|
||||||
.ne 2
|
|
||||||
.na
|
|
||||||
\fBzfs_zevent_cols\fR (int)
|
|
||||||
.ad
|
|
||||||
.RS 12n
|
|
||||||
When zevents are logged to the console use this as the word wrap width.
|
|
||||||
.sp
|
|
||||||
Default value: \fB80\fR.
|
|
||||||
.RE
|
|
||||||
|
|
||||||
.sp
|
|
||||||
.ne 2
|
|
||||||
.na
|
|
||||||
\fBzfs_zevent_console\fR (int)
|
|
||||||
.ad
|
|
||||||
.RS 12n
|
|
||||||
Log events to the console
|
|
||||||
.sp
|
|
||||||
Use \fB1\fR for yes and \fB0\fR for no (default).
|
|
||||||
.RE
|
|
||||||
|
|
||||||
.sp
|
.sp
|
||||||
.ne 2
|
.ne 2
|
||||||
.na
|
.na
|
||||||
|
|
313
module/zfs/fm.c
313
module/zfs/fm.c
|
@ -66,12 +66,9 @@
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
#include <sys/atomic.h>
|
#include <sys/atomic.h>
|
||||||
#include <sys/condvar.h>
|
#include <sys/condvar.h>
|
||||||
#include <sys/console.h>
|
|
||||||
#include <sys/zfs_ioctl.h>
|
#include <sys/zfs_ioctl.h>
|
||||||
|
|
||||||
int zfs_zevent_len_max = 512;
|
int zfs_zevent_len_max = 512;
|
||||||
int zfs_zevent_cols = 80;
|
|
||||||
int zfs_zevent_console = 0;
|
|
||||||
|
|
||||||
static int zevent_len_cur = 0;
|
static int zevent_len_cur = 0;
|
||||||
static int zevent_waiters = 0;
|
static int zevent_waiters = 0;
|
||||||
|
@ -118,307 +115,6 @@ kstat_t *fm_ksp;
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
|
|
||||||
/*
|
|
||||||
* Formatting utility function for fm_nvprintr. We attempt to wrap chunks of
|
|
||||||
* output so they aren't split across console lines, and return the end column.
|
|
||||||
*/
|
|
||||||
/*PRINTFLIKE4*/
|
|
||||||
static int
|
|
||||||
fm_printf(int depth, int c, int cols, const char *format, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
int width;
|
|
||||||
char c1;
|
|
||||||
|
|
||||||
va_start(ap, format);
|
|
||||||
width = vsnprintf(&c1, sizeof (c1), format, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
if (c + width >= cols) {
|
|
||||||
console_printf("\n");
|
|
||||||
c = 0;
|
|
||||||
if (format[0] != ' ' && depth > 0) {
|
|
||||||
console_printf(" ");
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
va_start(ap, format);
|
|
||||||
console_vprintf(format, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
return ((c + width) % cols);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Recursively print an nvlist in the specified column width and return the
|
|
||||||
* column we end up in. This function is called recursively by fm_nvprint(),
|
|
||||||
* below. We generically format the entire nvpair using hexadecimal
|
|
||||||
* integers and strings, and elide any integer arrays. Arrays are basically
|
|
||||||
* used for cache dumps right now, so we suppress them so as not to overwhelm
|
|
||||||
* the amount of console output we produce at panic time. This can be further
|
|
||||||
* enhanced as FMA technology grows based upon the needs of consumers. All
|
|
||||||
* FMA telemetry is logged using the dump device transport, so the console
|
|
||||||
* output serves only as a fallback in case this procedure is unsuccessful.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
fm_nvprintr(nvlist_t *nvl, int d, int c, int cols)
|
|
||||||
{
|
|
||||||
nvpair_t *nvp;
|
|
||||||
|
|
||||||
for (nvp = nvlist_next_nvpair(nvl, NULL);
|
|
||||||
nvp != NULL; nvp = nvlist_next_nvpair(nvl, nvp)) {
|
|
||||||
|
|
||||||
data_type_t type = nvpair_type(nvp);
|
|
||||||
const char *name = nvpair_name(nvp);
|
|
||||||
|
|
||||||
boolean_t b;
|
|
||||||
uint8_t i8;
|
|
||||||
uint16_t i16;
|
|
||||||
uint32_t i32;
|
|
||||||
uint64_t i64;
|
|
||||||
char *str;
|
|
||||||
nvlist_t *cnv;
|
|
||||||
|
|
||||||
if (strcmp(name, FM_CLASS) == 0)
|
|
||||||
continue; /* already printed by caller */
|
|
||||||
|
|
||||||
c = fm_printf(d, c, cols, " %s=", name);
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case DATA_TYPE_BOOLEAN:
|
|
||||||
c = fm_printf(d + 1, c, cols, " 1");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_BOOLEAN_VALUE:
|
|
||||||
(void) nvpair_value_boolean_value(nvp, &b);
|
|
||||||
c = fm_printf(d + 1, c, cols, b ? "1" : "0");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_BYTE:
|
|
||||||
(void) nvpair_value_byte(nvp, &i8);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i8);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_INT8:
|
|
||||||
(void) nvpair_value_int8(nvp, (void *)&i8);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i8);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT8:
|
|
||||||
(void) nvpair_value_uint8(nvp, &i8);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i8);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_INT16:
|
|
||||||
(void) nvpair_value_int16(nvp, (void *)&i16);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i16);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT16:
|
|
||||||
(void) nvpair_value_uint16(nvp, &i16);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i16);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_INT32:
|
|
||||||
(void) nvpair_value_int32(nvp, (void *)&i32);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i32);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT32:
|
|
||||||
(void) nvpair_value_uint32(nvp, &i32);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%x", i32);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_INT64:
|
|
||||||
(void) nvpair_value_int64(nvp, (void *)&i64);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx",
|
|
||||||
(u_longlong_t)i64);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT64:
|
|
||||||
(void) nvpair_value_uint64(nvp, &i64);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx",
|
|
||||||
(u_longlong_t)i64);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_HRTIME:
|
|
||||||
(void) nvpair_value_hrtime(nvp, (void *)&i64);
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx",
|
|
||||||
(u_longlong_t)i64);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_STRING:
|
|
||||||
(void) nvpair_value_string(nvp, &str);
|
|
||||||
c = fm_printf(d + 1, c, cols, "\"%s\"",
|
|
||||||
str ? str : "<NULL>");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_NVLIST:
|
|
||||||
c = fm_printf(d + 1, c, cols, "[");
|
|
||||||
(void) nvpair_value_nvlist(nvp, &cnv);
|
|
||||||
c = fm_nvprintr(cnv, d + 1, c, cols);
|
|
||||||
c = fm_printf(d + 1, c, cols, " ]");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_NVLIST_ARRAY: {
|
|
||||||
nvlist_t **val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[");
|
|
||||||
(void) nvpair_value_nvlist_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++) {
|
|
||||||
c = fm_nvprintr(val[i], d + 1, c, cols);
|
|
||||||
}
|
|
||||||
c = fm_printf(d + 1, c, cols, " ]");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_INT8_ARRAY: {
|
|
||||||
int8_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_int8_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT8_ARRAY: {
|
|
||||||
uint8_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_uint8_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_INT16_ARRAY: {
|
|
||||||
int16_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_int16_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT16_ARRAY: {
|
|
||||||
uint16_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_uint16_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_INT32_ARRAY: {
|
|
||||||
int32_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_int32_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT32_ARRAY: {
|
|
||||||
uint32_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_uint32_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_INT64_ARRAY: {
|
|
||||||
int64_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_int64_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_UINT64_ARRAY: {
|
|
||||||
uint64_t *val;
|
|
||||||
uint_t i, nelem;
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "[ ");
|
|
||||||
(void) nvpair_value_uint64_array(nvp, &val, &nelem);
|
|
||||||
for (i = 0; i < nelem; i++)
|
|
||||||
c = fm_printf(d + 1, c, cols, "0x%llx ",
|
|
||||||
(u_longlong_t)val[i]);
|
|
||||||
|
|
||||||
c = fm_printf(d + 1, c, cols, "]");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DATA_TYPE_STRING_ARRAY:
|
|
||||||
case DATA_TYPE_BOOLEAN_ARRAY:
|
|
||||||
case DATA_TYPE_BYTE_ARRAY:
|
|
||||||
c = fm_printf(d + 1, c, cols, "[...]");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DATA_TYPE_UNKNOWN:
|
|
||||||
case DATA_TYPE_DONTCARE:
|
|
||||||
c = fm_printf(d + 1, c, cols, "<unknown>");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (c);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
fm_nvprint(nvlist_t *nvl)
|
|
||||||
{
|
|
||||||
char *class;
|
|
||||||
int c = 0;
|
|
||||||
|
|
||||||
console_printf("\n");
|
|
||||||
|
|
||||||
if (nvlist_lookup_string(nvl, FM_CLASS, &class) == 0)
|
|
||||||
c = fm_printf(0, c, zfs_zevent_cols, "%s", class);
|
|
||||||
|
|
||||||
if (fm_nvprintr(nvl, 0, c, zfs_zevent_cols) != 0)
|
|
||||||
console_printf("\n");
|
|
||||||
|
|
||||||
console_printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static zevent_t *
|
static zevent_t *
|
||||||
zfs_zevent_alloc(void)
|
zfs_zevent_alloc(void)
|
||||||
{
|
{
|
||||||
|
@ -542,9 +238,6 @@ zfs_zevent_post(nvlist_t *nvl, nvlist_t *detector, zevent_cb_t *cb)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (zfs_zevent_console)
|
|
||||||
fm_nvprint(nvl);
|
|
||||||
|
|
||||||
ev = zfs_zevent_alloc();
|
ev = zfs_zevent_alloc();
|
||||||
if (ev == NULL) {
|
if (ev == NULL) {
|
||||||
atomic_inc_64(&erpt_kstat_data.erpt_dropped.value.ui64);
|
atomic_inc_64(&erpt_kstat_data.erpt_dropped.value.ui64);
|
||||||
|
@ -1673,9 +1366,3 @@ fm_fini(void)
|
||||||
|
|
||||||
ZFS_MODULE_PARAM(zfs_zevent, zfs_zevent_, len_max, INT, ZMOD_RW,
|
ZFS_MODULE_PARAM(zfs_zevent, zfs_zevent_, len_max, INT, ZMOD_RW,
|
||||||
"Max event queue length");
|
"Max event queue length");
|
||||||
|
|
||||||
ZFS_MODULE_PARAM(zfs_zevent, zfs_zevent_, cols, INT, ZMOD_RW,
|
|
||||||
"Max event column width");
|
|
||||||
|
|
||||||
ZFS_MODULE_PARAM(zfs_zevent, zfs_zevent_, console, INT, ZMOD_RW,
|
|
||||||
"Log events to the console");
|
|
||||||
|
|
Loading…
Reference in New Issue