コード例 #1
0
ファイル: fmd_dr.c プロジェクト: andreiw/polaris
/*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);
}
コード例 #2
0
ファイル: fmd_dr.c プロジェクト: andreiw/polaris
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));
}
コード例 #3
0
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);
}