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 status library * * This library is responsible for querying health and other status information * from disk drives. It is intended to be a generic interface, however only --- 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 status library * * This library is responsible for querying health and other status information * from disk drives. It is intended to be a generic interface, however only
*** 34,43 **** --- 33,43 ---- * capable of detecting the following status conditions: * * - Predictive failure * - Overtemp * - Self-test failure + * - Solid State Media wearout */ #include <assert.h> #include <errno.h> #include <fcntl.h>
*** 129,138 **** --- 129,139 ---- { nvlist_free(dsp->ds_state); nvlist_free(dsp->ds_predfail); nvlist_free(dsp->ds_overtemp); nvlist_free(dsp->ds_testfail); + nvlist_free(dsp->ds_ssmwearout); if (dsp->ds_data) dsp->ds_transport->dt_close(dsp->ds_data); (void) close(dsp->ds_fd); free(dsp->ds_path); free(dsp);
*** 170,179 **** --- 171,182 ---- * Scan (or rescan) the current device. */ nvlist_free(dsp->ds_testfail); nvlist_free(dsp->ds_predfail); nvlist_free(dsp->ds_overtemp); + nvlist_free(dsp->ds_ssmwearout); + dsp->ds_ssmwearout = NULL; dsp->ds_testfail = dsp->ds_overtemp = dsp->ds_predfail = NULL; dsp->ds_faults = 0; /* * Even if there is an I/O failure when trying to scan the device, we
*** 220,229 **** --- 223,241 ---- (dsp->ds_faults & DS_FAULT_OVERTEMP) != 0)) != 0 || (err = nvlist_add_nvlist(nvl, FM_EREPORT_SCSI_OVERTEMP, dsp->ds_overtemp)) != 0) goto nverror; } + + if (dsp->ds_ssmwearout != NULL) { + if ((err = nvlist_add_boolean_value(faults, + FM_EREPORT_SCSI_SSMWEAROUT, + (dsp->ds_faults & DS_FAULT_SSMWEAROUT) != 0)) != 0 || + (err = nvlist_add_nvlist(nvl, FM_EREPORT_SCSI_SSMWEAROUT, + dsp->ds_ssmwearout)) != 0) + goto nverror; + } if ((err = nvlist_add_nvlist(nvl, "faults", faults)) != 0) goto nverror; nvlist_free(faults);