Lines Matching defs:ahp

66 fmd_asru_strhash(fmd_asru_hash_t *ahp, const char *val)
68 return (topo_fmri_strhash(ahp->ah_topo->ft_hdl, val) % ahp->ah_hashlen);
72 fmd_asru_strcmp(fmd_asru_hash_t *ahp, const char *a, const char *b)
74 return (topo_fmri_strcmp(ahp->ah_topo->ft_hdl, a, b));
78 fmd_asru_create(fmd_asru_hash_t *ahp, const char *uuid,
90 ap->asru_root = fmd_strdup(ahp->ah_dirpath, FMD_SLEEP);
117 fmd_asru_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_t *ap)
119 uint_t h = fmd_asru_strhash(ahp, ap->asru_name);
121 ASSERT(RW_WRITE_HELD(&ahp->ah_lock));
122 ap->asru_next = ahp->ah_hash[h];
123 ahp->ah_hash[h] = ap;
124 ahp->ah_count++;
143 fmd_asru_hash_lookup(fmd_asru_hash_t *ahp, const char *name)
148 ASSERT(RW_LOCK_HELD(&ahp->ah_lock));
149 h = fmd_asru_strhash(ahp, name);
151 for (ap = ahp->ah_hash[h]; ap != NULL; ap = ap->asru_next) {
152 if (fmd_asru_strcmp(ahp, ap->asru_name, name))
232 fmd_asru_asru_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp,
235 uint_t h = fmd_asru_strhash(ahp, name);
237 ASSERT(RW_WRITE_HELD(&ahp->ah_lock));
238 alp->al_asru_next = ahp->ah_asru_hash[h];
239 ahp->ah_asru_hash[h] = alp;
240 ahp->ah_al_count++;
244 fmd_asru_case_hash_insert(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp,
247 uint_t h = fmd_asru_strhash(ahp, name);
249 ASSERT(RW_WRITE_HELD(&ahp->ah_lock));
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)
257 uint_t h = fmd_asru_strhash(ahp, name);
259 ASSERT(RW_WRITE_HELD(&ahp->ah_lock));
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,
268 uint_t h = fmd_asru_strhash(ahp, name);
270 ASSERT(RW_WRITE_HELD(&ahp->ah_lock));
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,
279 uint_t h = fmd_asru_strhash(ahp, name);
281 ASSERT(RW_WRITE_HELD(&ahp->ah_lock));
282 alp->al_rsrc_next = ahp->ah_rsrc_hash[h];
283 ahp->ah_rsrc_hash[h] = alp;
323 fmd_asru_al_hash_release(fmd_asru_hash_t *ahp, fmd_asru_link_t *alp)
353 fmd_asru_al_create(fmd_asru_hash_t *ahp, nvlist_t *nvl, fmd_case_t *cp,
379 * ahp->ah_lock held and hash it in. We'll then drop the rwlock and
382 (void) pthread_rwlock_wrlock(&ahp->ah_lock);
399 if ((ap = fmd_asru_hash_lookup(ahp, name)) == NULL) {
400 ap = fmd_asru_create(ahp, al_uuid, name, got_asru ? asru :
402 fmd_asru_hash_insert(ahp, ap);
414 fmd_asru_asru_hash_insert(ahp, alp, alp->al_asru_name);
416 fmd_asru_fru_hash_insert(ahp, alp, alp->al_fru_name);
418 fmd_asru_rsrc_hash_insert(ahp, alp, alp->al_rsrc_name);
420 fmd_asru_label_hash_insert(ahp, alp, label);
422 fmd_asru_case_hash_insert(ahp, alp, cip->ci_uuid);
424 (void) pthread_rwlock_unlock(&ahp->ah_lock);
438 fmd_asru_hash_recreate(fmd_log_t *lp, fmd_event_t *ep, fmd_asru_hash_t *ahp)
466 ahp->ah_error = EFMD_ASRU_EVENT;
472 ahp->ah_error = EFMD_ASRU_EVENT;
538 alp = fmd_asru_al_create(ahp, flt, cp, fmd_strbasename(lp->log_name));
601 fmd_asru_hash_discard(fmd_asru_hash_t *ahp, const char *uuid, int err)
605 (void) snprintf(src, PATH_MAX, "%s/%s", ahp->ah_dirpath, uuid);
606 (void) snprintf(dst, PATH_MAX, "%s/%s-", ahp->ah_dirpath, uuid);
624 fmd_asru_hash_logopen(fmd_asru_hash_t *ahp, const char *uuid)
626 fmd_log_t *lp = fmd_log_tryopen(ahp->ah_dirpath, uuid, FMD_LOG_ASRU);
630 fmd_asru_hash_discard(ahp, uuid, errno);
634 ahp->ah_error = 0;
635 n = ahp->ah_al_count;
637 fmd_log_replay(lp, (fmd_log_f *)fmd_asru_hash_recreate, ahp);
640 if (ahp->ah_al_count == n)
641 fmd_asru_hash_discard(ahp, uuid, ahp->ah_error);
645 fmd_asru_hash_refresh(fmd_asru_hash_t *ahp)
651 if ((dirp = opendir(ahp->ah_dirpath)) == NULL) {
653 "failed to open asru cache directory %s", ahp->ah_dirpath);
659 (void) pthread_rwlock_wrlock(&ahp->ah_lock);
666 fmd_asru_hash_discard(ahp, dp->d_name, 0);
668 fmd_asru_hash_logopen(ahp, dp->d_name);
671 (void) pthread_rwlock_unlock(&ahp->ah_lock);
706 fmd_asru_hash_replay(fmd_asru_hash_t *ahp)
708 fmd_asru_hash_apply(ahp, fmd_asru_hash_replay_asru, NULL);
813 fmd_asru_hash_t *ahp;
816 ahp = fmd_alloc(sizeof (fmd_asru_hash_t), FMD_SLEEP);
817 (void) pthread_rwlock_init(&ahp->ah_lock, NULL);
818 ahp->ah_hashlen = fmd.d_str_buckets;
819 ahp->ah_hash = fmd_zalloc(sizeof (void *) * ahp->ah_hashlen, FMD_SLEEP);
820 ahp->ah_asru_hash = fmd_zalloc(sizeof (void *) * ahp->ah_hashlen,
822 ahp->ah_case_hash = fmd_zalloc(sizeof (void *) * ahp->ah_hashlen,
824 ahp->ah_fru_hash = fmd_zalloc(sizeof (void *) * ahp->ah_hashlen,
826 ahp->ah_label_hash = fmd_zalloc(sizeof (void *) * ahp->ah_hashlen,
828 ahp->ah_rsrc_hash = fmd_zalloc(sizeof (void *) * ahp->ah_hashlen,
831 ahp->ah_dirpath = fmd_strdup(path, FMD_SLEEP);
832 (void) fmd_conf_getprop(fmd.d_conf, "rsrc.age", &ahp->ah_lifetime);
835 ahp->ah_al_count = 0;
836 ahp->ah_count = 0;
837 ahp->ah_error = 0;
838 ahp->ah_topo = fmd_topo_hold();
840 return (ahp);
844 fmd_asru_hash_destroy(fmd_asru_hash_t *ahp)
849 for (i = 0; i < ahp->ah_hashlen; i++) {
850 for (alp = ahp->ah_case_hash[i]; alp != NULL; alp = np) {
855 fmd_asru_al_hash_release(ahp, alp);
859 fmd_strfree(ahp->ah_dirpath);
860 fmd_free(ahp->ah_hash, sizeof (void *) * ahp->ah_hashlen);
861 fmd_free(ahp->ah_asru_hash, sizeof (void *) * ahp->ah_hashlen);
862 fmd_free(ahp->ah_case_hash, sizeof (void *) * ahp->ah_hashlen);
863 fmd_free(ahp->ah_fru_hash, sizeof (void *) * ahp->ah_hashlen);
864 fmd_free(ahp->ah_label_hash, sizeof (void *) * ahp->ah_hashlen);
865 fmd_free(ahp->ah_rsrc_hash, sizeof (void *) * ahp->ah_hashlen);
866 fmd_topo_rele(ahp->ah_topo);
867 fmd_free(ahp, sizeof (fmd_asru_hash_t));
875 fmd_asru_hash_apply(fmd_asru_hash_t *ahp,
881 (void) pthread_rwlock_rdlock(&ahp->ah_lock);
883 aps = app = fmd_alloc(ahp->ah_count * sizeof (fmd_asru_t *), FMD_SLEEP);
884 apc = ahp->ah_count;
886 for (i = 0; i < ahp->ah_hashlen; i++) {
887 for (ap = ahp->ah_hash[i]; ap != NULL; ap = ap->asru_next)
892 (void) pthread_rwlock_unlock(&ahp->ah_lock);
897 fmd_asru_hash_release(ahp, aps[i]);
904 fmd_asru_al_hash_apply(fmd_asru_hash_t *ahp,
910 (void) pthread_rwlock_rdlock(&ahp->ah_lock);
912 alps = alpp = fmd_alloc(ahp->ah_al_count * sizeof (fmd_asru_link_t *),
914 alpc = ahp->ah_al_count;
916 for (i = 0; i < ahp->ah_hashlen; i++) {
917 for (alp = ahp->ah_case_hash[i]; alp != NULL;
923 (void) pthread_rwlock_unlock(&ahp->ah_lock);
927 fmd_asru_al_hash_release(ahp, alps[i]);
934 fmd_asru_do_hash_apply(fmd_asru_hash_t *ahp, const char *name,
942 (void) pthread_rwlock_rdlock(&ahp->ah_lock);
944 h = fmd_asru_strhash(ahp, name);
949 if (fmd_asru_strcmp(ahp,
959 if (fmd_asru_strcmp(ahp,
965 (void) pthread_rwlock_unlock(&ahp->ah_lock);
969 fmd_asru_al_hash_release(ahp, alps[i]);
976 fmd_asru_hash_apply_by_asru(fmd_asru_hash_t *ahp, const char *name,
979 fmd_asru_do_hash_apply(ahp, name, func, arg, ahp->ah_asru_hash,
985 fmd_asru_hash_apply_by_case(fmd_asru_hash_t *ahp, fmd_case_t *cp,
988 fmd_asru_do_hash_apply(ahp, ((fmd_case_impl_t *)cp)->ci_uuid, func, arg,
989 ahp->ah_case_hash, offsetof(fmd_asru_link_t, al_case_uuid),
994 fmd_asru_hash_apply_by_fru(fmd_asru_hash_t *ahp, const char *name,
997 fmd_asru_do_hash_apply(ahp, name, func, arg, ahp->ah_fru_hash,
1003 fmd_asru_hash_apply_by_rsrc(fmd_asru_hash_t *ahp, const char *name,
1006 fmd_asru_do_hash_apply(ahp, name, func, arg, ahp->ah_rsrc_hash,
1012 fmd_asru_hash_apply_by_label(fmd_asru_hash_t *ahp, const char *name,
1015 fmd_asru_do_hash_apply(ahp, name, func, arg, ahp->ah_label_hash,
1025 fmd_asru_hash_lookup_name(fmd_asru_hash_t *ahp, const char *name)
1029 (void) pthread_rwlock_rdlock(&ahp->ah_lock);
1030 ap = fmd_asru_hash_lookup(ahp, name);
1031 (void) pthread_rwlock_unlock(&ahp->ah_lock);
1055 fmd_asru_hash_create_entry(fmd_asru_hash_t *ahp, fmd_case_t *cp, nvlist_t *nvl)
1076 alp = fmd_asru_al_create(ahp, nvl, cp, parsed_uuid);
1087 * We take 'ahp' for symmetry and in case we need to use it in future work.
1091 fmd_asru_hash_release(fmd_asru_hash_t *ahp, fmd_asru_t *ap)
1103 fmd_asru_do_delete_entry(fmd_asru_hash_t *ahp, fmd_case_t *cp,
1109 (void) pthread_rwlock_wrlock(&ahp->ah_lock);
1110 h = fmd_asru_strhash(ahp, name);
1122 (void) pthread_rwlock_unlock(&ahp->ah_lock);
1126 fmd_asru_do_hash_delete(fmd_asru_hash_t *ahp, fmd_case_susp_t *cis,
1137 fmd_asru_do_delete_entry(ahp, cp, hash, next_offset,
1141 fmd_asru_do_delete_entry(ahp, cp, hash, next_offset, "");
1145 fmd_asru_hash_delete_case(fmd_asru_hash_t *ahp, fmd_case_t *cp)
1159 fmd_asru_do_hash_delete(ahp, cis, cp, ahp->ah_fru_hash,
1161 fmd_asru_do_hash_delete(ahp, cis, cp, ahp->ah_rsrc_hash,
1166 fmd_asru_do_delete_entry(ahp, cp, ahp->ah_label_hash,
1168 fmd_asru_do_hash_delete(ahp, cis, cp, ahp->ah_asru_hash,
1175 (void) pthread_rwlock_wrlock(&ahp->ah_lock);
1176 h = fmd_asru_strhash(ahp, cip->ci_uuid);
1177 plp = &ahp->ah_case_hash[h];
1183 ASSERT(ahp->ah_al_count != 0);
1184 ahp->ah_al_count--;
1202 ahp->ah_dirpath, alp->al_uuid);
1220 ASSERT(ahp->ah_count != 0);
1221 ahp->ah_count--;
1222 h = fmd_asru_strhash(ahp, ap->asru_name);
1223 pp = &ahp->ah_hash[h];
1235 fmd_asru_al_hash_release(ahp, alp);
1239 (void) pthread_rwlock_unlock(&ahp->ah_lock);