/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
*/
fru P;
asru P;
/*
* Over all comments for this file:
* <disk-as-detector> The disk-as-detector DE provides the mapping between
* ereports generated by a kernel disk driver sd(7D) and resulting faults.
*/
/*
* SERD engine for media error fault propagation:
*
* This strategy is designed to give a file system, like ZFS, the
* ability to attempt data recovery/relocation without faulting a disk.
* This implementation depends on a file system retry to the same lba
* to trigger a fault when recovery/relocation is not possible.
*
* We let the engine propagate one error only once every 1 minute and then if we
* still get 2 or more * errors within 24 hours for the same LBA, there is a fault.
*/
/*
* disk-as-detector: fault events.
*/
/*
* The uderr fault will be defined at some future time.
* event fault.io.scsi.cmd.disk.dev.uderr@P;
*/
/*
* disk-as-detector: upset events.
* NOTE: For now we define an upset to implement discard.
*/
/*
* disk-as-detector: ereports from the kernel.
*
* We don't know the topology for all scsi disks, but the kernel will always
* generate ereport telemetry assuming that we do. We define these ereports
* with 'discard_if_config_unknown=1', which permits ereports against things
* with unknown topology to be silently discarded. The ereport data is logged
* in either case, and can be viewed via 'fmdump -eV'.
*/
/*
* For some ereports we let the 'driver-assessment', communicated as part of
* the ereport payload, determine fault .vs. upset via propagation constraints.
*/
/*
* disk-as-detector: propagations from faults(based on
* DRIVER_ASSESSMENT_FATAL).
* We need to set additional fault payloads to indicate fault details.
* The payload we may need are listed as following:
* fault.io.scsi.cmd.disk.dev.rqs.derr
* op_code, key, asc, ascq
* fault.io.scsi.cmd.disk.dev.rqs.merr
* op_code, key, asc, ascq, lba
*/
/*
* Utilize setserdsuffix with specific LBA,
* the serd engine would only trigger if the fault recurred on the same LBA
*/
/*
* NOTE: this propagation uses the "may" propagation of eversholt.
* The ereport need never exist. It's just a way of making
* the diagnosis wait for the within time on that ereport
* to complete. Once it has completed the diagnosis continues
* even though the dummy ereport didn't occur.
*/
/*
* The uderr fault will be propagated at some future time.
* prop fault.io.scsi.cmd.disk.dev.uderr@P->
* ereport.io.scsi.cmd.disk.dev.uderr@P{ DRIVER_ASSESSMENT_FATAL };
*/
/*
* disk-as-detector: propagations from upsets(based on
* DRIVER_ASSESSMENT_NONFATAL).
*/
/*
* disk-as-detector: propagations from upsets(independent of
* driver-assessment)
*/
/*
* --------------------------------------
* The remainder of this file contains rules associated with the operation of
* cmd/fm/modules/common/disk-monitor/disk_monitor.c code.
*
* The disk DE provides a very simple 1-to-1 mapping between SCSI disk events
* generated by the disk-transport fmd module, and the resulting faults.
*/
/*
* Fault events.
*/
/*
* ereports.
*/
/*
* Propagations.
*/