Lines Matching full:hdl

137 static void zfs_purge_cases(fmd_hdl_t *hdl);
152 zfs_case_unserialize(fmd_hdl_t *hdl, fmd_case_t *cp) in zfs_case_unserialize() argument
156 zcp = fmd_hdl_zalloc(hdl, sizeof (zfs_case_t), FMD_SLEEP); in zfs_case_unserialize()
159 fmd_buf_read(hdl, cp, CASE_DATA, &zcp->zc_data, in zfs_case_unserialize()
163 fmd_hdl_free(hdl, zcp, sizeof (zfs_case_t)); in zfs_case_unserialize()
174 zcp->zc_remove_timer = fmd_timer_install(hdl, zcp, in zfs_case_unserialize()
180 fmd_case_setspecific(hdl, cp, zcp); in zfs_case_unserialize()
189 zfs_other_serd_cases(fmd_hdl_t *hdl, const zfs_case_data_t *zfs_case) in zfs_other_serd_cases() argument
204 fmd_serd_gc(hdl); in zfs_other_serd_cases()
205 zfs_purge_cases(hdl); in zfs_other_serd_cases()
228 fmd_serd_active(hdl, zcd->zc_serd_checksum)) { in zfs_other_serd_cases()
232 fmd_serd_active(hdl, zcd->zc_serd_io)) { in zfs_other_serd_cases()
236 fmd_serd_active(hdl, zcd->zc_serd_slow_io)) { in zfs_other_serd_cases()
390 zfs_purge_cases(fmd_hdl_t *hdl) in zfs_purge_cases() argument
394 libzfs_handle_t *zhdl = fmd_hdl_getspecific(hdl); in zfs_purge_cases()
431 fmd_case_close(hdl, zcp->zc_case); in zfs_purge_cases()
450 zfs_case_retire(fmd_hdl_t *hdl, zfs_case_t *zcp) in zfs_case_retire() argument
452 fmd_hdl_debug(hdl, "retiring case"); in zfs_case_retire()
454 fmd_case_close(hdl, zcp->zc_case); in zfs_case_retire()
463 zfs_case_solve(fmd_hdl_t *hdl, zfs_case_t *zcp, const char *faultname) in zfs_case_solve() argument
468 fmd_hdl_debug(hdl, "solving fault '%s'", faultname); in zfs_case_solve()
475 detector = fmd_nvl_alloc(hdl, FMD_SLEEP); in zfs_case_solve()
486 fault = fmd_nvl_create_fault(hdl, faultname, 100, detector, in zfs_case_solve()
488 fmd_case_add_suspect(hdl, zcp->zc_case, fault); in zfs_case_solve()
492 fmd_case_solve(hdl, zcp->zc_case); in zfs_case_solve()
496 fmd_timer_remove(hdl, zcp->zc_remove_timer); in zfs_case_solve()
514 zfs_ereport_when(fmd_hdl_t *hdl, nvlist_t *nvl, er_timeval_t *when) in zfs_ereport_when() argument
516 (void) hdl; in zfs_ereport_when()
538 zfs_fm_serd_record(fmd_hdl_t *hdl, const char *name, fmd_event_t *ep, in zfs_fm_serd_record() argument
541 int fired = fmd_serd_record(hdl, name, ep); in zfs_fm_serd_record()
544 if (fired && (peers = zfs_other_serd_cases(hdl, &zcp->zc_data)) > 0) { in zfs_fm_serd_record()
545 fmd_hdl_debug(hdl, "pool %llu is tracking %d other %s cases " in zfs_fm_serd_record()
550 zfs_case_retire(hdl, zcp); in zfs_fm_serd_record()
561 zfs_fm_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class) in zfs_fm_recv() argument
580 if (fmd_nvl_class_match(hdl, nvl, "sysevent.fs.zfs.*")) { in zfs_fm_recv()
581 fmd_hdl_debug(hdl, "purging orphaned cases from %s", in zfs_fm_recv()
583 zfs_purge_cases(hdl); in zfs_fm_recv()
588 isresource = fmd_nvl_class_match(hdl, nvl, "resource.fs.zfs.*"); in zfs_fm_recv()
615 fmd_hdl_debug(hdl, "ignoring '%s' during import", class); in zfs_fm_recv()
623 (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
625 fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
627 fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
629 fmd_hdl_debug(hdl, "ignoring '%s' during pool open", class); in zfs_fm_recv()
661 zfs_ereport_when(hdl, nvl, &er_when); in zfs_fm_recv()
685 fmd_hdl_debug(hdl, "ignoring pool %llx, " in zfs_fm_recv()
698 libzfs_handle_t *zhdl = fmd_hdl_getspecific(hdl); in zfs_fm_recv()
711 fmd_hdl_debug(hdl, "ignoring pool %llx, " in zfs_fm_recv()
733 fmd_hdl_debug(hdl, "discarding '%s for vdev %llu", in zfs_fm_recv()
752 cs = fmd_case_open(hdl, NULL); in zfs_fm_recv()
754 fmd_hdl_debug(hdl, "opening case for vdev %llu due to '%s'", in zfs_fm_recv()
762 fmd_buf_create(hdl, cs, CASE_DATA, sizeof (zfs_case_data_t)); in zfs_fm_recv()
771 fmd_buf_write(hdl, cs, CASE_DATA, &data, sizeof (data)); in zfs_fm_recv()
773 zcp = zfs_case_unserialize(hdl, cs); in zfs_fm_recv()
780 fmd_hdl_debug(hdl, "resource event '%s'", class); in zfs_fm_recv()
782 if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
791 fmd_case_close(hdl, zcp->zc_case); in zfs_fm_recv()
792 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
804 fmd_timer_remove(hdl, zcp->zc_remove_timer); in zfs_fm_recv()
809 fmd_serd_reset(hdl, zcp->zc_data.zc_serd_io); in zfs_fm_recv()
811 fmd_serd_reset(hdl, in zfs_fm_recv()
814 fmd_serd_reset(hdl, in zfs_fm_recv()
816 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
824 fmd_hdl_debug(hdl, "closing case after a " in zfs_fm_recv()
826 fmd_case_close(hdl, zcp->zc_case); in zfs_fm_recv()
836 fmd_case_add_ereport(hdl, zcp->zc_case, ep); in zfs_fm_recv()
841 if (fmd_case_solved(hdl, zcp->zc_case)) in zfs_fm_recv()
845 fmd_hdl_debug(hdl, "error event '%s', vdev %llu", class, in zfs_fm_recv()
848 fmd_hdl_debug(hdl, "error event '%s'", class); in zfs_fm_recv()
864 if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
875 fmd_case_close(hdl, dcp->zc_case); in zfs_fm_recv()
878 zfs_case_solve(hdl, zcp, "fault.fs.zfs.pool"); in zfs_fm_recv()
879 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
884 zfs_case_solve(hdl, zcp, "fault.fs.zfs.log_replay"); in zfs_fm_recv()
885 } else if (fmd_nvl_class_match(hdl, nvl, "ereport.fs.zfs.vdev.*")) { in zfs_fm_recv()
889 zfs_case_solve(hdl, zcp, "fault.fs.zfs.device"); in zfs_fm_recv()
890 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
892 fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
894 fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
896 fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
898 fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
911 if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
926 fmd_serd_create(hdl, zcp->zc_data.zc_serd_io, in zfs_fm_recv()
931 if (zfs_fm_serd_record(hdl, zcp->zc_data.zc_serd_io, in zfs_fm_recv()
935 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
952 fmd_serd_create(hdl, in zfs_fm_recv()
960 zfs_fm_serd_record(hdl, in zfs_fm_recv()
962 zfs_case_solve(hdl, zcp, in zfs_fm_recv()
965 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
989 fmd_hdl_debug(hdl, "ignoring '%s' for " in zfs_fm_recv()
1008 fmd_serd_create(hdl, in zfs_fm_recv()
1014 if (zfs_fm_serd_record(hdl, in zfs_fm_recv()
1017 zfs_case_solve(hdl, zcp, in zfs_fm_recv()
1020 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
1027 zfs_case_solve(hdl, zcp, in zfs_fm_recv()
1031 zfs_case_solve(hdl, zcp, in zfs_fm_recv()
1034 } else if (fmd_nvl_class_match(hdl, nvl, in zfs_fm_recv()
1049 fmd_timer_remove(hdl, zcp->zc_remove_timer); in zfs_fm_recv()
1050 zcp->zc_remove_timer = fmd_timer_install(hdl, zcp, NULL, in zfs_fm_recv()
1065 zfs_fm_timeout(fmd_hdl_t *hdl, id_t id, void *data) in zfs_fm_timeout() argument
1070 zfs_case_solve(hdl, zcp, "fault.fs.zfs.vdev.io"); in zfs_fm_timeout()
1078 zfs_fm_close(fmd_hdl_t *hdl, fmd_case_t *cs) in zfs_fm_close() argument
1080 zfs_case_t *zcp = fmd_case_getspecific(hdl, cs); in zfs_fm_close()
1083 fmd_serd_destroy(hdl, zcp->zc_data.zc_serd_checksum); in zfs_fm_close()
1085 fmd_serd_destroy(hdl, zcp->zc_data.zc_serd_io); in zfs_fm_close()
1087 fmd_serd_destroy(hdl, zcp->zc_data.zc_serd_slow_io); in zfs_fm_close()
1089 fmd_timer_remove(hdl, zcp->zc_remove_timer); in zfs_fm_close()
1093 fmd_hdl_free(hdl, zcp, sizeof (zfs_case_t)); in zfs_fm_close()
1113 _zfs_diagnosis_init(fmd_hdl_t *hdl) in _zfs_diagnosis_init() argument
1134 if (fmd_hdl_register(hdl, FMD_API_VERSION, &fmd_info) != 0) { in _zfs_diagnosis_init()
1141 fmd_hdl_setspecific(hdl, zhdl); in _zfs_diagnosis_init()
1143 (void) fmd_stat_create(hdl, FMD_STAT_NOALLOC, sizeof (zfs_stats) / in _zfs_diagnosis_init()
1148 _zfs_diagnosis_fini(fmd_hdl_t *hdl) in _zfs_diagnosis_fini() argument
1159 fmd_hdl_debug(hdl, "removing case ena %llu", in _zfs_diagnosis_fini()
1163 fmd_hdl_free(hdl, zcp, sizeof (zfs_case_t)); in _zfs_diagnosis_fini()
1170 zhdl = fmd_hdl_getspecific(hdl); in _zfs_diagnosis_fini()