Lines Matching refs:alp
232 fmd_asru_asru_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp, in fmd_asru_asru_hash_insert() argument
238 alp->al_asru_next = ahp->ah_asru_hash[h]; in fmd_asru_asru_hash_insert()
239 ahp->ah_asru_hash[h] = alp; in fmd_asru_asru_hash_insert()
244 fmd_asru_case_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp, in fmd_asru_case_hash_insert() argument
250 alp->al_case_next = ahp->ah_case_hash[h]; in fmd_asru_case_hash_insert()
251 ahp->ah_case_hash[h] = alp; in fmd_asru_case_hash_insert()
255 fmd_asru_fru_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp, char *name) in fmd_asru_fru_hash_insert() argument
260 alp->al_fru_next = ahp->ah_fru_hash[h]; in fmd_asru_fru_hash_insert()
261 ahp->ah_fru_hash[h] = alp; in fmd_asru_fru_hash_insert()
265 fmd_asru_label_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp, in fmd_asru_label_hash_insert() argument
271 alp->al_label_next = ahp->ah_label_hash[h]; in fmd_asru_label_hash_insert()
272 ahp->ah_label_hash[h] = alp; in fmd_asru_label_hash_insert()
276 fmd_asru_rsrc_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp, in fmd_asru_rsrc_hash_insert() argument
282 alp->al_rsrc_next = ahp->ah_rsrc_hash[h]; in fmd_asru_rsrc_hash_insert()
283 ahp->ah_rsrc_hash[h] = alp; in fmd_asru_rsrc_hash_insert()
287 fmd_asru_al_destroy(fmd_asru_link_t *alp) in fmd_asru_al_destroy() argument
289 ASSERT(alp->al_refs == 0); in fmd_asru_al_destroy()
290 ASSERT(MUTEX_HELD(&alp->al_asru->asru_lock)); in fmd_asru_al_destroy()
292 if (alp->al_log != NULL) in fmd_asru_al_destroy()
293 fmd_log_rele(alp->al_log); in fmd_asru_al_destroy()
295 fmd_free(alp->al_uuid, alp->al_uuidlen + 1); in fmd_asru_al_destroy()
296 nvlist_free(alp->al_event); in fmd_asru_al_destroy()
297 fmd_strfree(alp->al_rsrc_name); in fmd_asru_al_destroy()
298 fmd_strfree(alp->al_case_uuid); in fmd_asru_al_destroy()
299 fmd_strfree(alp->al_fru_name); in fmd_asru_al_destroy()
300 fmd_strfree(alp->al_asru_name); in fmd_asru_al_destroy()
301 fmd_strfree(alp->al_label); in fmd_asru_al_destroy()
302 nvlist_free(alp->al_asru_fmri); in fmd_asru_al_destroy()
303 fmd_free(alp, sizeof (fmd_asru_link_t)); in fmd_asru_al_destroy()
307 fmd_asru_al_hold(fmd_asru_link_t *alp) in fmd_asru_al_hold() argument
309 fmd_asru_t *ap = alp->al_asru; in fmd_asru_al_hold()
313 alp->al_refs++; in fmd_asru_al_hold()
314 ASSERT(alp->al_refs != 0); in fmd_asru_al_hold()
316 return (alp); in fmd_asru_al_hold()
323 fmd_asru_al_hash_release(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp) in fmd_asru_al_hash_release() argument
325 fmd_asru_t *ap = alp->al_asru; in fmd_asru_al_hash_release()
328 ASSERT(alp->al_refs != 0); in fmd_asru_al_hash_release()
329 if (--alp->al_refs == 0) in fmd_asru_al_hash_release()
330 fmd_asru_al_destroy(alp); in fmd_asru_al_hash_release()
360 fmd_asru_link_t *alp; in fmd_asru_al_create() local
387 alp = fmd_zalloc(sizeof (fmd_asru_link_t), FMD_SLEEP); in fmd_asru_al_create()
389 (void) nvlist_xdup(asru, &alp->al_asru_fmri, &fmd.d_nva); in fmd_asru_al_create()
390 alp->al_uuid = fmd_strdup(al_uuid, FMD_SLEEP); in fmd_asru_al_create()
391 alp->al_uuidlen = strlen(alp->al_uuid); in fmd_asru_al_create()
392 alp->al_refs = 1; in fmd_asru_al_create()
411 fmd_list_append(&ap->asru_list, (fmd_list_t *)alp); in fmd_asru_al_create()
412 alp->al_asru = ap; in fmd_asru_al_create()
413 alp->al_asru_name = got_asru ? asru_name : fmd_strdup("", FMD_SLEEP); in fmd_asru_al_create()
414 fmd_asru_asru_hash_insert(ahp, alp, alp->al_asru_name); in fmd_asru_al_create()
415 alp->al_fru_name = got_fru ? fru_name : fmd_strdup("", FMD_SLEEP); in fmd_asru_al_create()
416 fmd_asru_fru_hash_insert(ahp, alp, alp->al_fru_name); in fmd_asru_al_create()
417 alp->al_rsrc_name = got_rsrc ? rsrc_name : fmd_strdup("", FMD_SLEEP); in fmd_asru_al_create()
418 fmd_asru_rsrc_hash_insert(ahp, alp, alp->al_rsrc_name); in fmd_asru_al_create()
419 alp->al_label = fmd_strdup(label, FMD_SLEEP); in fmd_asru_al_create()
420 fmd_asru_label_hash_insert(ahp, alp, label); in fmd_asru_al_create()
421 alp->al_case_uuid = fmd_strdup(cip->ci_uuid, FMD_SLEEP); in fmd_asru_al_create()
422 fmd_asru_case_hash_insert(ahp, alp, cip->ci_uuid); in fmd_asru_al_create()
426 ap->asru_case = alp->al_case = cp; in fmd_asru_al_create()
430 (void) nvlist_xdup(nvl, &alp->al_event, &fmd.d_nva); in fmd_asru_al_create()
434 return (alp); in fmd_asru_al_create()
448 fmd_asru_link_t *alp; in fmd_asru_hash_recreate() local
538 alp = fmd_asru_al_create(ahp, flt, cp, fmd_strbasename(lp->log_name)); in fmd_asru_hash_recreate()
539 ap = alp->al_asru; in fmd_asru_hash_recreate()
550 if (nvlist_lookup_nvlist(alp->al_event, FM_FAULT_ASRU, in fmd_asru_hash_recreate()
580 alp->al_flags |= FMD_ASRU_FAULTY; in fmd_asru_hash_recreate()
584 alp->al_flags |= FMD_ASRU_UNUSABLE; in fmd_asru_hash_recreate()
588 alp->al_reason = FMD_ASRU_REPLACED; in fmd_asru_hash_recreate()
590 alp->al_reason = FMD_ASRU_REPAIRED; in fmd_asru_hash_recreate()
592 alp->al_reason = FMD_ASRU_ACQUITTED; in fmd_asru_hash_recreate()
594 alp->al_reason = FMD_ASRU_REMOVED; in fmd_asru_hash_recreate()
596 TRACE((FMD_DBG_ASRU, "asru %s recreated as %p (%s)", alp->al_uuid, in fmd_asru_hash_recreate()
717 fmd_asru_repair_if_aged(fmd_asru_link_t *alp, void *arg) in fmd_asru_repair_if_aged() argument
726 if (!(alp->al_flags & FMD_ASRU_FAULTY)) in fmd_asru_repair_if_aged()
733 if (alp->al_flags & FMD_ASRU_PROXY) in fmd_asru_repair_if_aged()
736 ps = fmd_asru_replacement_state(alp->al_event, HC_ONLY_FALSE); in fmd_asru_repair_if_aged()
741 fmd_asru_repaired(alp, &fara); in fmd_asru_repair_if_aged()
744 lp = fmd_log_open(alp->al_asru->asru_root, alp->al_uuid, in fmd_asru_repair_if_aged()
754 fmd_asru_repaired(alp, &fara); in fmd_asru_repair_if_aged()
761 fmd_asru_check_if_aged(fmd_asru_link_t *alp, void *arg) in fmd_asru_check_if_aged() argument
773 lp = fmd_log_open(alp->al_asru->asru_root, alp->al_uuid, FMD_LOG_ASRU); in fmd_asru_check_if_aged()
784 fmd_asru_most_recent(fmd_asru_link_t *alp, void *arg) in fmd_asru_most_recent() argument
792 lp = fmd_log_open(alp->al_asru->asru_root, alp->al_uuid, FMD_LOG_ASRU); in fmd_asru_most_recent()
846 fmd_asru_link_t *alp, *np; in fmd_asru_hash_destroy() local
850 for (alp = ahp->ah_case_hash[i]; alp != NULL; alp = np) { in fmd_asru_hash_destroy()
851 np = alp->al_case_next; in fmd_asru_hash_destroy()
852 alp->al_case_next = NULL; in fmd_asru_hash_destroy()
853 fmd_case_rele(alp->al_case); in fmd_asru_hash_destroy()
854 alp->al_case = NULL; in fmd_asru_hash_destroy()
855 fmd_asru_al_hash_release(ahp, alp); in fmd_asru_hash_destroy()
907 fmd_asru_link_t *alp, **alps, **alpp; in fmd_asru_al_hash_apply() local
917 for (alp = ahp->ah_case_hash[i]; alp != NULL; in fmd_asru_al_hash_apply()
918 alp = alp->al_case_next) in fmd_asru_al_hash_apply()
919 *alpp++ = fmd_asru_al_hold(alp); in fmd_asru_al_hash_apply()
938 fmd_asru_link_t *alp, **alps, **alpp; in fmd_asru_do_hash_apply() local
946 for (alp = hash[h]; alp != NULL; alp = in fmd_asru_do_hash_apply()
948 FMD_ASRU_AL_HASH_NEXT(alp, next_offset)) in fmd_asru_do_hash_apply()
951 FMD_ASRU_AL_HASH_NAME(alp, match_offset), name)) in fmd_asru_do_hash_apply()
956 for (alp = hash[h]; alp != NULL; alp = in fmd_asru_do_hash_apply()
958 FMD_ASRU_AL_HASH_NEXT(alp, next_offset)) in fmd_asru_do_hash_apply()
961 FMD_ASRU_AL_HASH_NAME(alp, match_offset), name)) in fmd_asru_do_hash_apply()
962 *alpp++ = fmd_asru_al_hold(alp); in fmd_asru_do_hash_apply()
1060 fmd_asru_link_t *alp; in fmd_asru_hash_create_entry() local
1076 alp = fmd_asru_al_create(ahp, nvl, cp, parsed_uuid); in fmd_asru_hash_create_entry()
1078 alp->al_uuid, (void *)alp->al_asru)); in fmd_asru_hash_create_entry()
1081 return (alp); in fmd_asru_hash_create_entry()
1107 fmd_asru_link_t *alp, **pp, *alpnext, **alpnextp; in fmd_asru_do_delete_entry() local
1112 for (alp = *pp; alp != NULL; alp = alpnext) { in fmd_asru_do_delete_entry()
1114 alpnextp = FMD_ASRU_AL_HASH_NEXTP(alp, next_offset); in fmd_asru_do_delete_entry()
1116 if (alp->al_case == cp) { in fmd_asru_do_delete_entry()
1149 fmd_asru_link_t *alp, **plp, *alpnext; in fmd_asru_hash_delete_case() local
1178 for (alp = *plp; alp != NULL; alp = alpnext) { in fmd_asru_hash_delete_case()
1179 alpnext = alp->al_case_next; in fmd_asru_hash_delete_case()
1180 if (alp->al_case == cp) { in fmd_asru_hash_delete_case()
1181 *plp = alp->al_case_next; in fmd_asru_hash_delete_case()
1182 alp->al_case_next = NULL; in fmd_asru_hash_delete_case()
1190 alp->al_case = NULL; in fmd_asru_hash_delete_case()
1202 ahp->ah_dirpath, alp->al_uuid); in fmd_asru_hash_delete_case()
1212 ap = alp->al_asru; in fmd_asru_hash_delete_case()
1214 fmd_list_delete(&ap->asru_list, alp); in fmd_asru_hash_delete_case()
1235 fmd_asru_al_hash_release(ahp, alp); in fmd_asru_hash_delete_case()
1237 plp = &alp->al_case_next; in fmd_asru_hash_delete_case()
1248 fmd_asru_repair_containee(fmd_asru_link_t *alp, void *arg) in fmd_asru_repair_containee() argument
1252 if ((alp->al_asru->asru_flags & FMD_ASRU_INVISIBLE) && in fmd_asru_repair_containee()
1253 alp->al_asru_fmri && in fmd_asru_repair_containee()
1254 fmd_fmri_contains(farcp->farc_parent_fmri, alp->al_asru_fmri) > 0) { in fmd_asru_repair_containee()
1255 if (fmd_asru_clrflags(alp, FMD_ASRU_FAULTY, in fmd_asru_repair_containee()
1257 if (alp->al_flags & FMD_ASRU_PROXY) in fmd_asru_repair_containee()
1258 fmd_case_xprt_updated(alp->al_case); in fmd_asru_repair_containee()
1260 fmd_case_update(alp->al_case); in fmd_asru_repair_containee()
1266 fmd_asru_do_repair_containees(fmd_asru_link_t *alp, uint8_t reason) in fmd_asru_do_repair_containees() argument
1275 if (alp->al_asru_fmri != NULL && (!(alp->al_flags & FMD_ASRU_PROXY) || in fmd_asru_do_repair_containees()
1276 (alp->al_flags & FMD_ASRU_PROXY_WITH_ASRU))) { in fmd_asru_do_repair_containees()
1277 (void) pthread_mutex_lock(&alp->al_asru->asru_lock); in fmd_asru_do_repair_containees()
1278 flags = alp->al_asru->asru_flags; in fmd_asru_do_repair_containees()
1279 (void) pthread_mutex_unlock(&alp->al_asru->asru_lock); in fmd_asru_do_repair_containees()
1283 farc.farc_parent_fmri = alp->al_asru_fmri; in fmd_asru_do_repair_containees()
1292 fmd_asru_repaired(fmd_asru_link_t *alp, void *arg) in fmd_asru_repaired() argument
1300 if (alp->al_flags & FMD_ASRU_PROXY_RDONLY) in fmd_asru_repaired()
1307 (alp->al_flags & FMD_ASRU_PROXY) && in fmd_asru_repaired()
1308 !(alp->al_flags & FMD_ASRU_PROXY_WITH_ASRU)) in fmd_asru_repaired()
1315 strcmp(farap->fara_uuid, alp->al_case_uuid) != 0) in fmd_asru_repaired()
1323 !(alp->al_flags & FMD_ASRU_PROXY_EXTERNAL) && in fmd_asru_repaired()
1324 fmd_asru_replacement_state(alp->al_event, in fmd_asru_repaired()
1325 (alp->al_flags & FMD_ASRU_PROXY) ? HC_ONLY_TRUE : HC_ONLY_FALSE) == in fmd_asru_repaired()
1332 cleared = fmd_asru_clrflags(alp, FMD_ASRU_FAULTY, farap->fara_reason); in fmd_asru_repaired()
1333 fmd_asru_do_repair_containees(alp, farap->fara_reason); in fmd_asru_repaired()
1353 if (alp->al_flags & FMD_ASRU_PROXY) in fmd_asru_repaired()
1354 fmd_case_xprt_updated(alp->al_case); in fmd_asru_repaired()
1356 fmd_case_update(alp->al_case); in fmd_asru_repaired()
1367 fmd_asru_flush(fmd_asru_link_t *alp, void *arg) in fmd_asru_flush() argument
1372 if (alp->al_case) in fmd_asru_flush()
1373 fmd_case_discard_resolved(alp->al_case, &check_if_aged); in fmd_asru_flush()
1383 fmd_asru_set_on_proxy(fmd_asru_link_t *alp, void *arg) in fmd_asru_set_on_proxy() argument
1394 alp->al_flags |= FMD_ASRU_PROXY; in fmd_asru_set_on_proxy()
1395 alp->al_asru->asru_flags |= FMD_ASRU_PROXY; in fmd_asru_set_on_proxy()
1398 alp->al_flags |= FMD_ASRU_PROXY_EXTERNAL; in fmd_asru_set_on_proxy()
1399 alp->al_asru->asru_flags |= FMD_ASRU_PROXY_EXTERNAL; in fmd_asru_set_on_proxy()
1403 alp->al_flags |= FMD_ASRU_PROXY_RDONLY; in fmd_asru_set_on_proxy()
1409 alp->al_flags |= FMD_ASRU_PROXY_WITH_ASRU; in fmd_asru_set_on_proxy()
1410 alp->al_asru->asru_flags |= FMD_ASRU_PROXY_WITH_ASRU; in fmd_asru_set_on_proxy()
1417 fmd_asru_update_containees(fmd_asru_link_t *alp, void *arg) in fmd_asru_update_containees() argument
1419 fmd_asru_do_repair_containees(alp, alp->al_reason); in fmd_asru_update_containees()
1429 fmd_asru_update_status(fmd_asru_link_t *alp, void *arg) in fmd_asru_update_status() argument
1450 alp->al_flags |= FMD_ASRU_DEGRADED; in fmd_asru_update_status()
1452 alp->al_flags &= ~FMD_ASRU_DEGRADED; in fmd_asru_update_status()
1454 (void) fmd_asru_setflags(alp, FMD_ASRU_UNUSABLE); in fmd_asru_update_status()
1456 (void) fmd_asru_clrflags(alp, FMD_ASRU_UNUSABLE, 0); in fmd_asru_update_status()
1463 (void) fmd_asru_clrflags(alp, FMD_ASRU_FAULTY, in fmd_asru_update_status()
1469 (void) fmd_asru_setflags(alp, FMD_ASRU_FAULTY); in fmd_asru_update_status()
1476 alp->al_flags |= FMD_ASRU_PRESENT; in fmd_asru_update_status()
1477 alp->al_asru->asru_flags |= FMD_ASRU_PRESENT; in fmd_asru_update_status()
1479 alp->al_flags &= ~FMD_ASRU_PRESENT; in fmd_asru_update_status()
1480 alp->al_asru->asru_flags &= ~FMD_ASRU_PRESENT; in fmd_asru_update_status()
1492 fmd_asru_close_status(fmd_asru_link_t *alp, void *arg) in fmd_asru_close_status() argument
1498 alp->al_flags &= ~FMD_ASRU_DEGRADED; in fmd_asru_close_status()
1499 (void) fmd_asru_setflags(alp, FMD_ASRU_UNUSABLE); in fmd_asru_close_status()
1504 fmd_asru_logevent(fmd_asru_link_t *alp) in fmd_asru_logevent() argument
1506 fmd_asru_t *ap = alp->al_asru; in fmd_asru_logevent()
1507 boolean_t faulty = (alp->al_flags & FMD_ASRU_FAULTY) != 0; in fmd_asru_logevent()
1508 boolean_t unusable = (alp->al_flags & FMD_ASRU_UNUSABLE) != 0; in fmd_asru_logevent()
1510 boolean_t repaired = (alp->al_reason == FMD_ASRU_REPAIRED); in fmd_asru_logevent()
1511 boolean_t replaced = (alp->al_reason == FMD_ASRU_REPLACED); in fmd_asru_logevent()
1512 boolean_t acquitted = (alp->al_reason == FMD_ASRU_ACQUITTED); in fmd_asru_logevent()
1521 cip = (fmd_case_impl_t *)alp->al_case; in fmd_asru_logevent()
1530 if ((lp = alp->al_log) == NULL) in fmd_asru_logevent()
1531 lp = fmd_log_open(ap->asru_root, alp->al_uuid, FMD_LOG_ASRU); in fmd_asru_logevent()
1537 alp->al_asru_fmri, cip->ci_uuid, cip->ci_code, faulty, unusable, in fmd_asru_logevent()
1538 message, alp->al_event, &cip->ci_tv, repaired, replaced, acquitted, in fmd_asru_logevent()
1555 alp->al_log = NULL; in fmd_asru_logevent()
1559 fmd_asru_setflags(fmd_asru_link_t *alp, uint_t sflag) in fmd_asru_setflags() argument
1561 fmd_asru_t *ap = alp->al_asru; in fmd_asru_setflags()
1569 ostate = alp->al_flags & FMD_ASRU_STATE; in fmd_asru_setflags()
1570 alp->al_flags |= sflag; in fmd_asru_setflags()
1571 nstate = alp->al_flags & FMD_ASRU_STATE; in fmd_asru_setflags()
1579 TRACE((FMD_DBG_ASRU, "asru %s %s->%s", alp->al_uuid, in fmd_asru_setflags()
1582 fmd_asru_logevent(alp); in fmd_asru_setflags()
1590 fmd_asru_clrflags(fmd_asru_link_t *alp, uint_t sflag, uint8_t reason) in fmd_asru_clrflags() argument
1592 fmd_asru_t *ap = alp->al_asru; in fmd_asru_clrflags()
1601 ostate = alp->al_flags & FMD_ASRU_STATE; in fmd_asru_clrflags()
1602 alp->al_flags &= ~sflag; in fmd_asru_clrflags()
1603 nstate = alp->al_flags & FMD_ASRU_STATE; in fmd_asru_clrflags()
1606 if (reason > alp->al_reason && in fmd_asru_clrflags()
1607 ((fmd_case_impl_t *)alp->al_case)->ci_state < in fmd_asru_clrflags()
1609 alp->al_reason = reason; in fmd_asru_clrflags()
1610 fmd_asru_logevent(alp); in fmd_asru_clrflags()
1616 if (reason > alp->al_reason) in fmd_asru_clrflags()
1617 alp->al_reason = reason; in fmd_asru_clrflags()
1632 TRACE((FMD_DBG_ASRU, "asru %s %s->%s", alp->al_uuid, in fmd_asru_clrflags()
1635 fmd_asru_logevent(alp); in fmd_asru_clrflags()
1645 fmd_asru_log_resolved(fmd_asru_link_t *alp, void *unused) in fmd_asru_log_resolved() argument
1647 fmd_asru_t *ap = alp->al_asru; in fmd_asru_log_resolved()
1650 fmd_asru_logevent(alp); in fmd_asru_log_resolved()
1660 fmd_asru_al_getstate(fmd_asru_link_t *alp) in fmd_asru_al_getstate() argument
1662 int us, st = (alp->al_flags & (FMD_ASRU_FAULTY | FMD_ASRU_UNUSABLE)); in fmd_asru_al_getstate()
1674 if (!(alp->al_flags & FMD_ASRU_PROXY_EXTERNAL)) { in fmd_asru_al_getstate()
1675 ps = fmd_asru_replacement_state(alp->al_event, (alp->al_flags & in fmd_asru_al_getstate()
1680 if (alp->al_reason < FMD_ASRU_REPLACED) in fmd_asru_al_getstate()
1681 alp->al_reason = FMD_ASRU_REPLACED; in fmd_asru_al_getstate()
1685 if (ps == FMD_OBJ_STATE_UNKNOWN && (alp->al_flags & FMD_ASRU_PROXY)) in fmd_asru_al_getstate()
1686 st |= (alp->al_flags & (FMD_ASRU_DEGRADED | FMD_ASRU_PRESENT)); in fmd_asru_al_getstate()
1688 st |= (alp->al_flags & (FMD_ASRU_DEGRADED)) | FMD_ASRU_PRESENT; in fmd_asru_al_getstate()
1696 if ((!(alp->al_flags & FMD_ASRU_PROXY) || in fmd_asru_al_getstate()
1697 (alp->al_flags & FMD_ASRU_PROXY_WITH_ASRU)) && in fmd_asru_al_getstate()
1698 nvlist_lookup_nvlist(alp->al_event, FM_FAULT_ASRU, &asru) == 0) { in fmd_asru_al_getstate()