/*ARGSUSED*/ static void fmd_dr_rcache_sync(fmd_asru_t *ap, void *arg) { if (fmd_fmri_present(ap->asru_fmri) != 0) return; if (!fmd_asru_clrflags(ap, FMD_ASRU_FAULTY, NULL, NULL)) return; /* * We've located the requested ASRU, and have repaired it. Now * traverse the ASRU cache, looking for any faulty entries that * are contained by this one. If we find any, repair them too. */ fmd_asru_hash_apply(fmd.d_asrus, fmd_dr_repair_containee, ap->asru_fmri); }
static void fmd_dr_event(sysevent_t *sep) { uint64_t gen; /* * If the event target is in the R$ and this sysevent indicates it was * removed, remove it from the R$ also. */ (void) fmd_asru_hash_apply(fmd.d_asrus, fmd_dr_rcache_sync, NULL); (void) pthread_mutex_lock(&fmd.d_stats_lock); gen = fmd.d_stats->ds_dr_gen.fmds_value.ui64++; (void) pthread_mutex_unlock(&fmd.d_stats_lock); TRACE((FMD_DBG_XPRT, "dr event %p, gen=%llu", (void *)sep, gen)); }
bool_t fmd_adm_rsrclist_1_svc(bool_t all, struct fmd_rpc_rsrclist *rvp, struct svc_req *req) { rvp->rrl_buf.rrl_buf_len = 0; rvp->rrl_buf.rrl_buf_val = NULL; rvp->rrl_len = 0; rvp->rrl_cnt = 0; rvp->rrl_err = 0; rvp->rrl_all = all; if (fmd_rpc_deny(req)) rvp->rrl_err = FMD_ADM_ERR_PERM; else fmd_asru_hash_apply(fmd.d_asrus, fmd_adm_rsrclist_asru, rvp); return (TRUE); }