Lines Matching +full:threshold +full:- +full:detector

1 // SPDX-License-Identifier: CDDL-1.0
10 * or https://opensource.org/licenses/CDDL-1.0.
55 * SPA-wide ENA (Error Numeric Association).
58 * gets very complicated due to RAID-Z, gang blocks, and vdev caching. We want
63 * +---------------+
65 * +---------------+
68 * +---------------+ Reads associated with a piece of logical data.
69 * | Read I/O | This includes reads on behalf of RAID-Z,
70 * +---------------+ mirrors, gang blocks, retries, etc.
73 * +---------------+ Reads associated with a particular device, but
75 * +---------------+ and I/O aggregation.
80 * to a logical piece of data (i.e. RAID-Z requests).
111 * are kept in a recent_events_node_t in both a time-ordered list and an AVL
132 * intended to outlive the zfs diagnosis engine's threshold of 10 errors
174 if ((cmp = TREE_CMP(node1->re_subclass, node2->re_subclass)) != 0) in recent_events_compare()
176 if ((cmp = TREE_CMP(node1->re_pool_guid, node2->re_pool_guid)) != 0) in recent_events_compare()
178 if ((cmp = TREE_CMP(node1->re_vdev_guid, node2->re_vdev_guid)) != 0) in recent_events_compare()
180 if ((cmp = TREE_CMP(node1->re_io_error, node2->re_io_error)) != 0) in recent_events_compare()
182 if ((cmp = TREE_CMP(node1->re_io_priority, node2->re_io_priority)) != 0) in recent_events_compare()
184 if ((cmp = TREE_CMP(node1->re_io_size, node2->re_io_size)) != 0) in recent_events_compare()
186 if ((cmp = TREE_CMP(node1->re_io_offset, node2->re_io_offset)) != 0) in recent_events_compare()
189 const zbookmark_phys_t *zb1 = &node1->re_io_bookmark; in recent_events_compare()
190 const zbookmark_phys_t *zb2 = &node2->re_io_bookmark; in recent_events_compare()
192 if ((cmp = TREE_CMP(zb1->zb_objset, zb2->zb_objset)) != 0) in recent_events_compare()
194 if ((cmp = TREE_CMP(zb1->zb_object, zb2->zb_object)) != 0) in recent_events_compare()
196 if ((cmp = TREE_CMP(zb1->zb_level, zb2->zb_level)) != 0) in recent_events_compare()
198 if ((cmp = TREE_CMP(zb1->zb_blkid, zb2->zb_blkid)) != 0) in recent_events_compare()
215 propval = vd->vdev_checksum_n; in vdev_prop_get_inherited()
218 propval = vd->vdev_checksum_t; in vdev_prop_get_inherited()
221 propval = vd->vdev_io_n; in vdev_prop_get_inherited()
224 propval = vd->vdev_io_t; in vdev_prop_get_inherited()
227 propval = vd->vdev_slow_io_events; in vdev_prop_get_inherited()
230 propval = vd->vdev_slow_io_n; in vdev_prop_get_inherited()
233 propval = vd->vdev_slow_io_t; in vdev_prop_get_inherited()
243 if (vd->vdev_parent == NULL) in vdev_prop_get_inherited()
246 return (vdev_prop_get_inherited(vd->vdev_parent, prop)); in vdev_prop_get_inherited()
265 uint64_t age = NSEC2SEC(now - entry->re_timestamp); in zfs_ereport_cleaner()
308 vdev_guid = vd->vdev_guid; in zfs_ereport_clear()
320 if (entry->re_vdev_guid == vdev_guid || in zfs_ereport_clear()
321 entry->re_pool_guid == pool_guid) { in zfs_ereport_clear()
362 search.re_vdev_guid = vd->vdev_guid; in zfs_ereport_is_duplicate()
363 search.re_io_error = zio->io_error; in zfs_ereport_is_duplicate()
364 search.re_io_priority = zio->io_priority; in zfs_ereport_is_duplicate()
370 search.re_io_size = zio->io_size; in zfs_ereport_is_duplicate()
371 search.re_io_offset = zio->io_offset; in zfs_ereport_is_duplicate()
376 search.re_io_bookmark.zb_objset = zb->zb_objset; in zfs_ereport_is_duplicate()
377 search.re_io_bookmark.zb_object = zb->zb_object; in zfs_ereport_is_duplicate()
378 search.re_io_bookmark.zb_level = zb->zb_level; in zfs_ereport_is_duplicate()
379 search.re_io_bookmark.zb_blkid = zb->zb_blkid; in zfs_ereport_is_duplicate()
389 uint64_t age = NSEC2SEC(now - entry->re_timestamp); in zfs_ereport_is_duplicate()
398 entry->re_timestamp = now; in zfs_ereport_is_duplicate()
420 entry->re_timestamp = now; in zfs_ereport_is_duplicate()
431 zfs_zevent_post_cb(nvlist_t *nvl, nvlist_t *detector) in zfs_zevent_post_cb() argument
436 if (detector) in zfs_zevent_post_cb()
437 fm_nvlist_destroy(detector, FM_NVA_FREE); in zfs_zevent_post_cb()
455 rc = !zfs_ratelimit(&vd->vdev_delay_rl); in zfs_is_ratelimiting_event()
457 rc = !zfs_ratelimit(&vd->vdev_deadman_rl); in zfs_is_ratelimiting_event()
459 rc = !zfs_ratelimit(&vd->vdev_checksum_rl); in zfs_is_ratelimiting_event()
478 nvlist_t *ereport, *detector; in zfs_ereport_start() local
486 if ((detector = fm_nvlist_create(NULL)) == NULL) { in zfs_ereport_start()
494 mutex_enter(&spa->spa_errlist_lock); in zfs_ereport_start()
498 * state, use a SPA-wide ENA. Otherwise, if we are in an I/O state, use in zfs_ereport_start()
499 * a root zio-wide ENA. Otherwise, simply use a unique ENA. in zfs_ereport_start()
502 if (spa->spa_ena == 0) in zfs_ereport_start()
503 spa->spa_ena = fm_ena_generate(0, FM_ENA_FMT1); in zfs_ereport_start()
504 ena = spa->spa_ena; in zfs_ereport_start()
505 } else if (zio != NULL && zio->io_logical != NULL) { in zfs_ereport_start()
506 if (zio->io_logical->io_ena == 0) in zfs_ereport_start()
507 zio->io_logical->io_ena = in zfs_ereport_start()
509 ena = zio->io_logical->io_ena; in zfs_ereport_start()
515 * Construct the full class, detector, and other standard FMA fields. in zfs_ereport_start()
520 fm_fmri_zfs_set(detector, FM_ZFS_SCHEME_VERSION, spa_guid(spa), in zfs_ereport_start()
521 vd != NULL ? vd->vdev_guid : 0); in zfs_ereport_start()
523 fm_ereport_set(ereport, FM_EREPORT_VERSION, class, ena, detector, NULL); in zfs_ereport_start()
526 * Construct the per-ereport payload, depending on which parameters are in zfs_ereport_start()
550 vdev_t *pvd = vd->vdev_parent; in zfs_ereport_start()
551 vdev_queue_t *vq = &vd->vdev_queue; in zfs_ereport_start()
552 vdev_stat_t *vs = &vd->vdev_stat; in zfs_ereport_start()
559 DATA_TYPE_UINT64, vd->vdev_guid, in zfs_ereport_start()
561 DATA_TYPE_STRING, vd->vdev_ops->vdev_op_type, NULL); in zfs_ereport_start()
562 if (vd->vdev_path != NULL) in zfs_ereport_start()
565 DATA_TYPE_STRING, vd->vdev_path, NULL); in zfs_ereport_start()
566 if (vd->vdev_devid != NULL) in zfs_ereport_start()
569 DATA_TYPE_STRING, vd->vdev_devid, NULL); in zfs_ereport_start()
570 if (vd->vdev_fru != NULL) in zfs_ereport_start()
573 DATA_TYPE_STRING, vd->vdev_fru, NULL); in zfs_ereport_start()
574 if (vd->vdev_enc_sysfs_path != NULL) in zfs_ereport_start()
577 DATA_TYPE_STRING, vd->vdev_enc_sysfs_path, NULL); in zfs_ereport_start()
578 if (vd->vdev_ashift) in zfs_ereport_start()
581 DATA_TYPE_UINT64, vd->vdev_ashift, NULL); in zfs_ereport_start()
586 DATA_TYPE_UINT64, vq->vq_io_complete_ts, NULL); in zfs_ereport_start()
589 DATA_TYPE_UINT64, vq->vq_io_delta_ts, NULL); in zfs_ereport_start()
595 DATA_TYPE_UINT64, vs->vs_read_errors, in zfs_ereport_start()
597 DATA_TYPE_UINT64, vs->vs_write_errors, in zfs_ereport_start()
599 DATA_TYPE_UINT64, vs->vs_checksum_errors, in zfs_ereport_start()
601 DATA_TYPE_UINT64, vs->vs_slow_ios, in zfs_ereport_start()
603 DATA_TYPE_UINT64, vs->vs_dio_verify_errors, in zfs_ereport_start()
610 DATA_TYPE_UINT64, pvd->vdev_guid, in zfs_ereport_start()
612 DATA_TYPE_STRING, pvd->vdev_ops->vdev_op_type, in zfs_ereport_start()
614 if (pvd->vdev_path) in zfs_ereport_start()
617 DATA_TYPE_STRING, pvd->vdev_path, NULL); in zfs_ereport_start()
618 if (pvd->vdev_devid) in zfs_ereport_start()
621 DATA_TYPE_STRING, pvd->vdev_devid, NULL); in zfs_ereport_start()
624 spare_count = spa->spa_spares.sav_count; in zfs_ereport_start()
631 spare_vd = spa->spa_spares.sav_vdevs[i]; in zfs_ereport_start()
633 spare_paths[i] = spare_vd->vdev_path; in zfs_ereport_start()
634 spare_guids[i] = spare_vd->vdev_guid; in zfs_ereport_start()
652 DATA_TYPE_INT32, zio->io_error, NULL); in zfs_ereport_start()
654 DATA_TYPE_UINT64, zio->io_flags, NULL); in zfs_ereport_start()
656 DATA_TYPE_UINT32, zio->io_stage, NULL); in zfs_ereport_start()
658 DATA_TYPE_UINT32, zio->io_pipeline, NULL); in zfs_ereport_start()
660 DATA_TYPE_UINT64, zio->io_delay, NULL); in zfs_ereport_start()
662 DATA_TYPE_UINT64, zio->io_timestamp, NULL); in zfs_ereport_start()
664 DATA_TYPE_UINT64, zio->io_delta, NULL); in zfs_ereport_start()
666 DATA_TYPE_UINT32, zio->io_type, NULL); in zfs_ereport_start()
668 DATA_TYPE_UINT32, zio->io_priority, NULL); in zfs_ereport_start()
671 * If the 'size' parameter is non-zero, it indicates this is a in zfs_ereport_start()
672 * RAID-Z or other I/O where the physical offset and length are in zfs_ereport_start()
685 DATA_TYPE_UINT64, zio->io_offset, in zfs_ereport_start()
687 DATA_TYPE_UINT64, zio->io_size, NULL); in zfs_ereport_start()
703 if (zb != NULL && (zio == NULL || zio->io_logical != NULL)) { in zfs_ereport_start()
706 DATA_TYPE_UINT64, zb->zb_objset, in zfs_ereport_start()
708 DATA_TYPE_UINT64, zb->zb_object, in zfs_ereport_start()
710 DATA_TYPE_INT64, zb->zb_level, in zfs_ereport_start()
712 DATA_TYPE_UINT64, zb->zb_blkid, NULL); in zfs_ereport_start()
778 mutex_exit(&spa->spa_errlist_lock); in zfs_ereport_start()
781 *detector_out = detector; in zfs_ereport_start()
820 /* We store the bits in big-endian (largest-first) order */ in update_bad_bits()
843 uint32_t new_allowed_gap = eip->zei_mingap + 1; in zei_shrink_ranges()
846 size_t max = eip->zei_range_count; in zei_shrink_ranges()
848 struct zei_ranges *r = eip->zei_ranges; in zei_shrink_ranges()
850 ASSERT3U(eip->zei_range_count, >, 0); in zei_shrink_ranges()
851 ASSERT3U(eip->zei_range_count, <=, MAX_RANGES); in zei_shrink_ranges()
854 while (idx < max - 1) { in zei_shrink_ranges()
858 while (idx < max - 1) { in zei_shrink_ranges()
864 uint32_t gap = nstart - end; in zei_shrink_ranges()
877 ASSERT3U(output, <, eip->zei_range_count); in zei_shrink_ranges()
878 eip->zei_range_count = output; in zei_shrink_ranges()
879 eip->zei_mingap = mingap; in zei_shrink_ranges()
880 eip->zei_allowed_mingap = new_allowed_gap; in zei_shrink_ranges()
886 struct zei_ranges *r = eip->zei_ranges; in zei_add_range()
887 size_t count = eip->zei_range_count; in zei_add_range()
891 count = eip->zei_range_count; in zei_add_range()
894 eip->zei_mingap = UINT32_MAX; in zei_add_range()
895 eip->zei_allowed_mingap = 1; in zei_add_range()
897 int gap = start - r[count - 1].zr_end; in zei_add_range()
899 if (gap < eip->zei_allowed_mingap) { in zei_add_range()
900 r[count - 1].zr_end = end; in zei_add_range()
903 if (gap < eip->zei_mingap) in zei_add_range()
904 eip->zei_mingap = gap; in zei_add_range()
908 eip->zei_range_count++; in zei_add_range()
914 struct zei_ranges *r = eip->zei_ranges; in zei_range_total_size()
915 size_t count = eip->zei_range_count; in zei_range_total_size()
920 result += (r[idx].zr_end - r[idx].zr_start); in zei_range_total_size()
941 ssize_t start = -1; in annotate_ecksum()
946 if (info != NULL && info->zbc_injected) in annotate_ecksum()
949 if (info != NULL && info->zbc_has_cksum) { in annotate_ecksum()
953 info->zbc_checksum_name, in annotate_ecksum()
956 if (info->zbc_byteswapped) { in annotate_ecksum()
978 if (start == -1) in annotate_ecksum()
982 start = -1; in annotate_ecksum()
984 if (start != -1) in annotate_ecksum()
990 if (start != -1) in annotate_ecksum()
1011 * differences. Also convert our uint64_t-array offsets to byte in annotate_ecksum()
1014 for (range = 0; range < eip->zei_range_count; range++) { in annotate_ecksum()
1015 size_t start = eip->zei_ranges[range].zr_start; in annotate_ecksum()
1016 size_t end = eip->zei_ranges[range].zr_end; in annotate_ecksum()
1028 eip->zei_bits_set[offset] = set; in annotate_ecksum()
1029 eip->zei_bits_cleared[offset] = cleared; in annotate_ecksum()
1033 update_bad_bits(set, &eip->zei_range_sets[range]); in annotate_ecksum()
1034 update_bad_bits(cleared, &eip->zei_range_clears[range]); in annotate_ecksum()
1038 eip->zei_ranges[range].zr_start *= sizeof (uint64_t); in annotate_ecksum()
1039 eip->zei_ranges[range].zr_end *= sizeof (uint64_t); in annotate_ecksum()
1045 eip->zei_allowed_mingap *= sizeof (uint64_t); in annotate_ecksum()
1051 DATA_TYPE_UINT32_ARRAY, 2 * eip->zei_range_count, in annotate_ecksum()
1052 (uint32_t *)eip->zei_ranges, in annotate_ecksum()
1054 DATA_TYPE_UINT32, eip->zei_allowed_mingap, in annotate_ecksum()
1056 DATA_TYPE_UINT32_ARRAY, eip->zei_range_count, eip->zei_range_sets, in annotate_ecksum()
1058 DATA_TYPE_UINT32_ARRAY, eip->zei_range_count, eip->zei_range_clears, in annotate_ecksum()
1065 inline_size, (uint8_t *)eip->zei_bits_set, in annotate_ecksum()
1068 inline_size, (uint8_t *)eip->zei_bits_cleared, in annotate_ecksum()
1099 * failed, don't bother logging any new ereports - we're just going to in zfs_ereport_is_valid()
1103 spa->spa_last_open_failed) in zfs_ereport_is_valid()
1108 if (zio->io_type != ZIO_TYPE_READ && in zfs_ereport_is_valid()
1109 zio->io_type != ZIO_TYPE_WRITE) in zfs_ereport_is_valid()
1122 if (zio->io_vd == vd && !vdev_accessible(vd, zio)) in zfs_ereport_is_valid()
1129 if (zio->io_type == ZIO_TYPE_READ && in zfs_ereport_is_valid()
1130 zio->io_error == ECKSUM && in zfs_ereport_is_valid()
1131 vd->vdev_ops->vdev_op_leaf && in zfs_ereport_is_valid()
1132 vdev_dtl_contains(vd, DTL_MISSING, zio->io_txg, 1)) in zfs_ereport_is_valid()
1143 (vd->vdev_remove_wanted || vd->vdev_state == VDEV_STATE_REMOVED)) in zfs_ereport_is_valid()
1148 (zio != NULL) && (!zio->io_timestamp)) { in zfs_ereport_is_valid()
1161 * - 0 if an event was posted
1162 * - EINVAL if there was a problem posting event
1163 * - EBUSY if the event was rate limited
1164 * - EALREADY if the event was already posted (duplicate)
1173 nvlist_t *detector = NULL; in zfs_ereport_post() local
1184 if (!zfs_ereport_start(&ereport, &detector, subclass, spa, vd, in zfs_ereport_post()
1192 rc = zfs_zevent_post(ereport, detector, zfs_zevent_post_cb); in zfs_ereport_post()
1204 * - 0 if an event was posted
1205 * - EINVAL if there was a problem posting event
1206 * - EBUSY if the event was rate limited
1207 * - EALREADY if the event was already posted (duplicate)
1235 report->zcr_ckinfo = kmem_zalloc(sizeof (*info), KM_SLEEP); in zfs_ereport_start_checksum()
1236 memcpy(report->zcr_ckinfo, info, sizeof (*info)); in zfs_ereport_start_checksum()
1239 report->zcr_sector = 1ULL << vd->vdev_top->vdev_ashift; in zfs_ereport_start_checksum()
1240 report->zcr_align = in zfs_ereport_start_checksum()
1241 vdev_psize_to_asize(vd->vdev_top, report->zcr_sector); in zfs_ereport_start_checksum()
1242 report->zcr_length = length; in zfs_ereport_start_checksum()
1245 (void) zfs_ereport_start(&report->zcr_ereport, &report->zcr_detector, in zfs_ereport_start_checksum()
1248 if (report->zcr_ereport == NULL) { in zfs_ereport_start_checksum()
1254 mutex_enter(&spa->spa_errlist_lock); in zfs_ereport_start_checksum()
1255 report->zcr_next = zio->io_logical->io_cksum_report; in zfs_ereport_start_checksum()
1256 zio->io_logical->io_cksum_report = report; in zfs_ereport_start_checksum()
1257 mutex_exit(&spa->spa_errlist_lock); in zfs_ereport_start_checksum()
1268 info = annotate_ecksum(report->zcr_ereport, report->zcr_ckinfo, in zfs_ereport_finish_checksum()
1269 good_data, bad_data, report->zcr_length, drop_if_identical); in zfs_ereport_finish_checksum()
1271 zfs_zevent_post(report->zcr_ereport, in zfs_ereport_finish_checksum()
1272 report->zcr_detector, zfs_zevent_post_cb); in zfs_ereport_finish_checksum()
1274 zfs_zevent_post_cb(report->zcr_ereport, report->zcr_detector); in zfs_ereport_finish_checksum()
1276 report->zcr_ereport = report->zcr_detector = NULL; in zfs_ereport_finish_checksum()
1289 if (rpt->zcr_ereport != NULL) { in zfs_ereport_free_checksum()
1290 fm_nvlist_destroy(rpt->zcr_ereport, in zfs_ereport_free_checksum()
1292 fm_nvlist_destroy(rpt->zcr_detector, in zfs_ereport_free_checksum()
1296 rpt->zcr_free(rpt->zcr_cbdata, rpt->zcr_cbinfo); in zfs_ereport_free_checksum()
1298 if (rpt->zcr_ckinfo != NULL) in zfs_ereport_free_checksum()
1299 kmem_free(rpt->zcr_ckinfo, sizeof (*rpt->zcr_ckinfo)); in zfs_ereport_free_checksum()
1308 * - 0 if an event was posted
1309 * - EINVAL if there was a problem posting event
1310 * - EBUSY if the event was rate limited
1311 * - EALREADY if the event was already posted (duplicate)
1321 nvlist_t *detector = NULL; in zfs_ereport_post_checksum() local
1334 if (!zfs_ereport_start(&ereport, &detector, FM_EREPORT_ZFS_CHECKSUM, in zfs_ereport_post_checksum()
1343 rc = zfs_zevent_post(ereport, detector, zfs_zevent_post_cb); in zfs_ereport_post_checksum()
1388 FM_EREPORT_PAYLOAD_ZFS_VDEV_GUID, vd->vdev_guid)); in zfs_event_create()
1390 FM_EREPORT_PAYLOAD_ZFS_VDEV_STATE, vd->vdev_state)); in zfs_event_create()
1391 if (vd->vdev_path != NULL) in zfs_event_create()
1393 FM_EREPORT_PAYLOAD_ZFS_VDEV_PATH, vd->vdev_path)); in zfs_event_create()
1394 if (vd->vdev_devid != NULL) in zfs_event_create()
1396 FM_EREPORT_PAYLOAD_ZFS_VDEV_DEVID, vd->vdev_devid)); in zfs_event_create()
1397 if (vd->vdev_fru != NULL) in zfs_event_create()
1399 FM_EREPORT_PAYLOAD_ZFS_VDEV_FRU, vd->vdev_fru)); in zfs_event_create()
1400 if (vd->vdev_enc_sysfs_path != NULL) in zfs_event_create()
1403 vd->vdev_enc_sysfs_path)); in zfs_event_create()
1488 if (vd->vdev_physpath) { in zfs_post_state_change()
1491 vd->vdev_physpath); in zfs_post_state_change()
1493 if (vd->vdev_enc_sysfs_path) { in zfs_post_state_change()
1496 vd->vdev_enc_sysfs_path); in zfs_post_state_change()
1573 * /var/run/zfs/dsk/mypool/myvol -> /dev/disk3