usr/src/cmd/fm/modules/common/zfs-diagnosis/zfs_de.c
changeset 6523 c1d2a7f04573
parent 5094 71a3e95fb9e2
child 6643 3a34b0dbb107
equal deleted inserted replaced
6522:26439431f254 6523:c1d2a7f04573
    17  * information: Portions Copyright [yyyy] [name of copyright owner]
    17  * information: Portions Copyright [yyyy] [name of copyright owner]
    18  *
    18  *
    19  * CDDL HEADER END
    19  * CDDL HEADER END
    20  */
    20  */
    21 /*
    21 /*
    22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
    22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
    23  * Use is subject to license terms.
    23  * Use is subject to license terms.
    24  */
    24  */
    25 
    25 
    26 #pragma ident	"%Z%%M%	%I%	%E% SMI"
    26 #pragma ident	"%Z%%M%	%I%	%E% SMI"
    27 
    27 
   529 		 * picked up by the syseventd module, and any processing is done
   529 		 * picked up by the syseventd module, and any processing is done
   530 		 * as needed.
   530 		 * as needed.
   531 		 */
   531 		 */
   532 		zfs_case_solve(hdl, zcp, "fault.fs.zfs.device",  B_TRUE);
   532 		zfs_case_solve(hdl, zcp, "fault.fs.zfs.device",  B_TRUE);
   533 	} else {
   533 	} else {
       
   534 		char *failmode = NULL;
       
   535 
   534 		if (pool_state == SPA_LOAD_OPEN) {
   536 		if (pool_state == SPA_LOAD_OPEN) {
   535 			/*
   537 			/*
   536 			 * Error incurred during a pool open.  Reset the timer
   538 			 * Error incurred during a pool open.  Reset the timer
   537 			 * associated with this case.
   539 			 * associated with this case.
   538 			 */
   540 			 */
   574 				    fmd_prop_get_int32(hdl, "checksum_N"),
   576 				    fmd_prop_get_int32(hdl, "checksum_N"),
   575 				    fmd_prop_get_int64(hdl, "checksum_T"));
   577 				    fmd_prop_get_int64(hdl, "checksum_T"));
   576 				zfs_case_serialize(hdl, zcp);
   578 				zfs_case_serialize(hdl, zcp);
   577 			}
   579 			}
   578 			serd = zcp->zc_data.zc_serd_checksum;
   580 			serd = zcp->zc_data.zc_serd_checksum;
       
   581 		} else if (fmd_nvl_class_match(hdl, nvl,
       
   582 		    "ereport.fs.zfs.io_failure") && (nvlist_lookup_string(nvl,
       
   583 		    FM_EREPORT_PAYLOAD_ZFS_POOL_FAILMODE, &failmode) == 0) &&
       
   584 		    failmode != NULL) {
       
   585 			if (strncmp(failmode, FM_EREPORT_FAILMODE_CONTINUE,
       
   586 			    strlen(FM_EREPORT_FAILMODE_CONTINUE)) == 0) {
       
   587 				zfs_case_solve(hdl, zcp,
       
   588 				    "fault.fs.zfs.io_failure_continue",
       
   589 				    B_FALSE);
       
   590 			} else if (strncmp(failmode, FM_EREPORT_FAILMODE_WAIT,
       
   591 			    strlen(FM_EREPORT_FAILMODE_WAIT)) == 0) {
       
   592 				zfs_case_solve(hdl, zcp,
       
   593 				    "fault.fs.zfs.io_failure_wait", B_FALSE);
       
   594 			}
   579 		}
   595 		}
   580 
   596 
   581 		/*
   597 		/*
   582 		 * Because I/O errors may be due to device removal, we postpone
   598 		 * Because I/O errors may be due to device removal, we postpone
   583 		 * any diagnosis until we're sure that we aren't about to
   599 		 * any diagnosis until we're sure that we aren't about to