Lines Matching defs:alp

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