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) {