Print this page
8074 need to add FMA event for SSD wearout
*** 19,32 ****
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
- #pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Disk error transport module
*
* This transport module is responsible for translating between disk errors
* and FMA ereports. It is a read-only transport module, and checks for the
--- 19,31 ----
* CDDL HEADER END
*/
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Disk error transport module
*
* This transport module is responsible for translating between disk errors
* and FMA ereports. It is a read-only transport module, and checks for the
*** 33,42 ****
--- 32,42 ----
* following failures:
*
* - overtemp
* - predictive failure
* - self-test failure
+ * - solid state media wearout
*
* These failures are detected via the TOPO_METH_DISK_STATUS method, which
* leverages libdiskstatus to do the actual analysis. This transport module is
* in charge of the following tasks:
*
*** 111,121 ****
nvlist_t *result;
nvlist_t *fmri, *faults;
char *protocol;
int err;
disk_monitor_t *dmp = arg;
- uint64_t ena;
nvpair_t *elem;
boolean_t fault;
nvlist_t *details;
char *fmristr;
nvlist_t *in = NULL;
--- 111,120 ----
*** 150,163 ****
return (TOPO_WALK_NEXT);
}
nvlist_free(in);
- ena = fmd_event_ena_create(dmp->dm_hdl);
-
/*
! * Add any faults.
*/
if (nvlist_lookup_nvlist(result, "faults", &faults) == 0 &&
nvlist_lookup_string(result, "protocol", &protocol) == 0) {
elem = NULL;
while ((elem = nvlist_next_nvpair(faults, elem)) != NULL) {
--- 149,160 ----
return (TOPO_WALK_NEXT);
}
nvlist_free(in);
/*
! * Check for faults and post ereport(s) if needed
*/
if (nvlist_lookup_nvlist(result, "faults", &faults) == 0 &&
nvlist_lookup_string(result, "protocol", &protocol) == 0) {
elem = NULL;
while ((elem = nvlist_next_nvpair(faults, elem)) != NULL) {
*** 168,179 ****
if (!fault ||
nvlist_lookup_nvlist(result, nvpair_name(elem),
&details) != 0)
continue;
dt_post_ereport(dmp->dm_hdl, dmp->dm_xprt, protocol,
! nvpair_name(elem), ena, fmri, details);
}
}
nvlist_free(result);
nvlist_free(fmri);
--- 165,183 ----
if (!fault ||
nvlist_lookup_nvlist(result, nvpair_name(elem),
&details) != 0)
continue;
+ if (strcmp(nvpair_name(elem),
+ FM_EREPORT_SCSI_SSMWEAROUT) == 0 &&
+ fmd_prop_get_int32(dmp->dm_hdl,
+ "ignore-ssm-wearout") == FMD_B_TRUE)
+ continue;
+
dt_post_ereport(dmp->dm_hdl, dmp->dm_xprt, protocol,
! nvpair_name(elem),
! fmd_event_ena_create(dmp->dm_hdl), fmri, details);
}
}
nvlist_free(result);
nvlist_free(fmri);
*** 246,255 ****
--- 250,260 ----
static const fmd_prop_t fmd_props[] = {
{ "interval", FMD_TYPE_TIME, "1h" },
{ "min-interval", FMD_TYPE_TIME, "1min" },
{ "simulate", FMD_TYPE_STRING, "" },
+ { "ignore-ssm-wearout", FMD_TYPE_BOOL, "false"},
{ NULL, 0, NULL }
};
static const fmd_hdl_ops_t fmd_ops = {
NULL, /* fmdo_recv */
*** 260,270 ****
NULL, /* fmdo_send */
dt_topo_change, /* fmdo_topo_change */
};
static const fmd_hdl_info_t fmd_info = {
! "Disk Transport Agent", "1.0", &fmd_ops, fmd_props
};
void
_fmd_init(fmd_hdl_t *hdl)
{
--- 265,275 ----
NULL, /* fmdo_send */
dt_topo_change, /* fmdo_topo_change */
};
static const fmd_hdl_info_t fmd_info = {
! "Disk Transport Agent", "1.1", &fmd_ops, fmd_props
};
void
_fmd_init(fmd_hdl_t *hdl)
{