1305 fmd_list_append(&mp->mod_cases, cip);
1306 fmd_module_setcdirty(mp);
1307
1308 (void) pthread_mutex_lock(&cip->ci_mod->mod_stats_lock);
1309 cip->ci_mod->mod_stats->ms_caseopen.fmds_value.ui64++;
1310 (void) pthread_mutex_unlock(&cip->ci_mod->mod_stats_lock);
1311
1312 return ((fmd_case_t *)cip);
1313 }
1314
1315 static void
1316 fmd_case_destroy_suspects(fmd_case_impl_t *cip)
1317 {
1318 fmd_case_susp_t *cis, *ncis;
1319
1320 ASSERT(MUTEX_HELD(&cip->ci_lock));
1321
1322 if (cip->ci_proxy_asru)
1323 fmd_free(cip->ci_proxy_asru, sizeof (uint8_t) *
1324 cip->ci_nsuspects);
1325 if (cip->ci_diag_de)
1326 nvlist_free(cip->ci_diag_de);
1327 if (cip->ci_diag_asru)
1328 fmd_free(cip->ci_diag_asru, sizeof (uint8_t) *
1329 cip->ci_nsuspects);
1330
1331 for (cis = cip->ci_suspects; cis != NULL; cis = ncis) {
1332 ncis = cis->cis_next;
1333 nvlist_free(cis->cis_nvl);
1334 fmd_free(cis, sizeof (fmd_case_susp_t));
1335 }
1336
1337 cip->ci_suspects = NULL;
1338 cip->ci_nsuspects = 0;
1339 }
1340
1341 fmd_case_t *
1342 fmd_case_recreate(fmd_module_t *mp, fmd_xprt_t *xp,
1343 uint_t state, const char *uuid, const char *code)
1344 {
1345 fmd_case_impl_t *cip = fmd_zalloc(sizeof (fmd_case_impl_t), FMD_SLEEP);
2414
2415 void
2416 fmd_case_settime(fmd_case_t *cp, time_t tv_sec, suseconds_t tv_usec)
2417 {
2418 ((fmd_case_impl_t *)cp)->ci_tv.tv_sec = tv_sec;
2419 ((fmd_case_impl_t *)cp)->ci_tv.tv_usec = tv_usec;
2420 ((fmd_case_impl_t *)cp)->ci_tv_valid = 1;
2421 }
2422
2423 void
2424 fmd_case_set_injected(fmd_case_t *cp)
2425 {
2426 ((fmd_case_impl_t *)cp)->ci_injected = 1;
2427 }
2428
2429 void
2430 fmd_case_set_de_fmri(fmd_case_t *cp, nvlist_t *nvl)
2431 {
2432 fmd_case_impl_t *cip = (fmd_case_impl_t *)cp;
2433
2434 if (cip->ci_diag_de)
2435 nvlist_free(cip->ci_diag_de);
2436 cip->ci_diag_de = nvl;
2437 }
2438
2439 void
2440 fmd_case_setcode(fmd_case_t *cp, char *code)
2441 {
2442 fmd_case_impl_t *cip = (fmd_case_impl_t *)cp;
2443
2444 cip->ci_code = fmd_strdup(code, FMD_SLEEP);
2445 cip->ci_codelen = cip->ci_code ? strlen(cip->ci_code) + 1 : 0;
2446 }
2447
2448 /*ARGSUSED*/
2449 static void
2450 fmd_case_repair_replay_case(fmd_case_t *cp, void *arg)
2451 {
2452 int not_faulty = 0;
2453 int faulty = 0;
2454 nvlist_t *nvl;
|
1305 fmd_list_append(&mp->mod_cases, cip);
1306 fmd_module_setcdirty(mp);
1307
1308 (void) pthread_mutex_lock(&cip->ci_mod->mod_stats_lock);
1309 cip->ci_mod->mod_stats->ms_caseopen.fmds_value.ui64++;
1310 (void) pthread_mutex_unlock(&cip->ci_mod->mod_stats_lock);
1311
1312 return ((fmd_case_t *)cip);
1313 }
1314
1315 static void
1316 fmd_case_destroy_suspects(fmd_case_impl_t *cip)
1317 {
1318 fmd_case_susp_t *cis, *ncis;
1319
1320 ASSERT(MUTEX_HELD(&cip->ci_lock));
1321
1322 if (cip->ci_proxy_asru)
1323 fmd_free(cip->ci_proxy_asru, sizeof (uint8_t) *
1324 cip->ci_nsuspects);
1325 nvlist_free(cip->ci_diag_de);
1326 if (cip->ci_diag_asru)
1327 fmd_free(cip->ci_diag_asru, sizeof (uint8_t) *
1328 cip->ci_nsuspects);
1329
1330 for (cis = cip->ci_suspects; cis != NULL; cis = ncis) {
1331 ncis = cis->cis_next;
1332 nvlist_free(cis->cis_nvl);
1333 fmd_free(cis, sizeof (fmd_case_susp_t));
1334 }
1335
1336 cip->ci_suspects = NULL;
1337 cip->ci_nsuspects = 0;
1338 }
1339
1340 fmd_case_t *
1341 fmd_case_recreate(fmd_module_t *mp, fmd_xprt_t *xp,
1342 uint_t state, const char *uuid, const char *code)
1343 {
1344 fmd_case_impl_t *cip = fmd_zalloc(sizeof (fmd_case_impl_t), FMD_SLEEP);
2413
2414 void
2415 fmd_case_settime(fmd_case_t *cp, time_t tv_sec, suseconds_t tv_usec)
2416 {
2417 ((fmd_case_impl_t *)cp)->ci_tv.tv_sec = tv_sec;
2418 ((fmd_case_impl_t *)cp)->ci_tv.tv_usec = tv_usec;
2419 ((fmd_case_impl_t *)cp)->ci_tv_valid = 1;
2420 }
2421
2422 void
2423 fmd_case_set_injected(fmd_case_t *cp)
2424 {
2425 ((fmd_case_impl_t *)cp)->ci_injected = 1;
2426 }
2427
2428 void
2429 fmd_case_set_de_fmri(fmd_case_t *cp, nvlist_t *nvl)
2430 {
2431 fmd_case_impl_t *cip = (fmd_case_impl_t *)cp;
2432
2433 nvlist_free(cip->ci_diag_de);
2434 cip->ci_diag_de = nvl;
2435 }
2436
2437 void
2438 fmd_case_setcode(fmd_case_t *cp, char *code)
2439 {
2440 fmd_case_impl_t *cip = (fmd_case_impl_t *)cp;
2441
2442 cip->ci_code = fmd_strdup(code, FMD_SLEEP);
2443 cip->ci_codelen = cip->ci_code ? strlen(cip->ci_code) + 1 : 0;
2444 }
2445
2446 /*ARGSUSED*/
2447 static void
2448 fmd_case_repair_replay_case(fmd_case_t *cp, void *arg)
2449 {
2450 int not_faulty = 0;
2451 int faulty = 0;
2452 nvlist_t *nvl;
|