Lines Matching defs:entry

55 rfs4_dbe_getid(rfs4_dbe_t *entry)
57 return (entry->dbe_id);
61 rfs4_dbe_hold(rfs4_dbe_t *entry)
63 atomic_inc_32(&entry->dbe_refcnt);
67 * rfs4_dbe_rele_nolock only decrements the reference count of the entry.
70 rfs4_dbe_rele_nolock(rfs4_dbe_t *entry)
72 atomic_dec_32(&entry->dbe_refcnt);
77 rfs4_dbe_refcnt(rfs4_dbe_t *entry)
79 return (entry->dbe_refcnt);
83 * Mark an entry such that the dbsearch will skip it.
84 * Caller does not want this entry to be found any longer
87 rfs4_dbe_invalidate(rfs4_dbe_t *entry)
89 entry->dbe_invalid = TRUE;
90 entry->dbe_skipsearch = TRUE;
94 * Is this entry invalid?
97 rfs4_dbe_is_invalid(rfs4_dbe_t *entry)
99 return (entry->dbe_invalid);
103 rfs4_dbe_get_timerele(rfs4_dbe_t *entry)
105 return (entry->dbe_time_rele);
109 * Use these to temporarily hide/unhide a db entry.
112 rfs4_dbe_hide(rfs4_dbe_t *entry)
114 rfs4_dbe_lock(entry);
115 entry->dbe_skipsearch = TRUE;
116 rfs4_dbe_unlock(entry);
120 rfs4_dbe_unhide(rfs4_dbe_t *entry)
122 rfs4_dbe_lock(entry);
123 entry->dbe_skipsearch = FALSE;
124 rfs4_dbe_unlock(entry);
128 rfs4_dbe_rele(rfs4_dbe_t *entry)
130 mutex_enter(entry->dbe_lock);
131 ASSERT(entry->dbe_refcnt > 1);
132 atomic_dec_32(&entry->dbe_refcnt);
133 entry->dbe_time_rele = gethrestime_sec();
134 mutex_exit(entry->dbe_lock);
138 rfs4_dbe_lock(rfs4_dbe_t *entry)
140 mutex_enter(entry->dbe_lock);
144 rfs4_dbe_unlock(rfs4_dbe_t *entry)
146 mutex_exit(entry->dbe_lock);
150 rfs4_dbe_islocked(rfs4_dbe_t *entry)
152 return (mutex_owned(entry->dbe_lock));
156 rfs4_dbe_twait(rfs4_dbe_t *entry, clock_t timeout)
158 return (cv_timedwait(entry->dbe_cv, entry->dbe_lock, timeout));
162 rfs4_dbe_cv_broadcast(rfs4_dbe_t *entry)
164 cv_broadcast(entry->dbe_cv);
171 rfs4_dbe_t *entry = obj;
173 mutex_init(entry->dbe_lock, NULL, MUTEX_DEFAULT, NULL);
174 cv_init(entry->dbe_cv, NULL, CV_DEFAULT, NULL);
182 rfs4_dbe_t *entry = obj;
186 mutex_destroy(entry->dbe_lock);
187 cv_destroy(entry->dbe_cv);
421 rfs4_dbe_destroy(rfs4_dbe_t *entry)
427 rfs4_table_t *table = entry->dbe_table;
431 (CE_NOTE, "Destroying entry %p from %s",
432 (void*)entry, table->dbt_name));
434 mutex_enter(entry->dbe_lock);
435 ASSERT(entry->dbe_refcnt == 0);
436 mutex_exit(entry->dbe_lock);
440 l = &entry->dbe_indices[idx->dbi_tblidx];
446 key = idx->dbi_mkkey(entry->dbe_data);
450 DEQUEUE_IDX(bp, &entry->dbe_indices[idx->dbi_tblidx]);
455 (*table->dbt_destroy)(entry->dbe_data);
458 id_free(table->dbt_id_space, entry->dbe_id);
464 /* Destroy the entry itself */
465 kmem_cache_free(table->dbt_mem_cache, entry);
472 rfs4_dbe_t *entry;
476 (CE_NOTE, "Creating entry in table %s", table->dbt_name));
478 entry = kmem_cache_alloc(table->dbt_mem_cache, KM_SLEEP);
480 entry->dbe_refcnt = 1;
481 entry->dbe_invalid = FALSE;
482 entry->dbe_skipsearch = FALSE;
483 entry->dbe_time_rele = 0;
484 entry->dbe_id = 0;
487 entry->dbe_id = id;
488 entry->dbe_table = table;
491 entry->dbe_indices[i].next = entry->dbe_indices[i].prev = NULL;
492 entry->dbe_indices[i].entry = entry;
494 * We mark the entry as not indexed by setting the low
497 * used. After the entry is linked in to the
500 INVALIDATE_ADDR(entry->dbe_indices[i].entry);
503 entry->dbe_data = (rfs4_entry_t)&entry->dbe_indices[table->dbt_maxcnt];
504 bzero(entry->dbe_data, table->dbt_usize);
505 entry->dbe_data->dbe = entry;
507 if (!(*table->dbt_create)(entry->dbe_data, data)) {
508 kmem_cache_free(table->dbt_mem_cache, entry);
516 return (entry);
559 rfs4_dbe_t *entry;
572 if (l->entry->dbe_refcnt > 0 &&
573 (l->entry->dbe_skipsearch == FALSE ||
574 (l->entry->dbe_skipsearch == TRUE &&
576 (*idx->dbi_compare)(l->entry->dbe_data, key)) {
577 mutex_enter(l->entry->dbe_lock);
578 if (l->entry->dbe_refcnt == 0) {
579 mutex_exit(l->entry->dbe_lock);
584 rfs4_dbe_hold(l->entry);
586 mutex_exit(l->entry->dbe_lock);
592 (CE_NOTE, "Found entry %p for %p in table %s",
593 (void *)l->entry, key, table->dbt_name));
597 return (l->entry->dbe_data);
640 /* create entry */
641 entry = rfs4_dbe_create(table, id, arg);
642 if (entry == NULL) {
654 * Add one ref for entry into table's hash - only one
657 rfs4_dbe_hold(entry);
658 ENQUEUE(bp->dbk_head, &entry->dbe_indices[idx->dbi_tblidx]);
659 VALIDATE_ADDR(entry->dbe_indices[idx->dbi_tblidx].entry);
667 l = &entry->dbe_indices[ip->dbi_tblidx];
668 i = HASH(ip, ip->dbi_mkkey(entry->dbe_data));
677 (void*)entry, idx->dbi_keyname, (void*)key, table->dbt_name));
679 return (entry->dbe_data);
714 cp = (rfs4_client_t *)l->entry->dbe_data;
737 rfs4_dbe_t *entry;
748 entry = l->entry;
749 mutex_enter(entry->dbe_lock);
750 (*callout)(entry->dbe_data, data);
751 mutex_exit(entry->dbe_lock);
767 rfs4_dbe_t *entry;
783 entry = l->entry;
785 * Examine an entry. Ref count of 1 means
789 if (entry->dbe_refcnt != 1)
791 mutex_enter(entry->dbe_lock);
792 if ((entry->dbe_refcnt == 1) &&
795 (*table->dbt_expiry)(entry->dbe_data))) {
796 entry->dbe_refcnt--;
800 mutex_exit(entry->dbe_lock);
811 entry = t->entry;
813 if (entry->dbe_refcnt == 0) {
817 INVALIDATE_ADDR(t->entry);
818 rfs4_dbe_destroy(entry);
896 rfs4_dbe_debug(rfs4_dbe_t *entry)
899 (void *)entry, entry->dbe_table->dbt_name);
901 entry->dbe_refcnt, entry->dbe_id);