Lines Matching defs:dirh

141 dirhash_purge_entries(struct dirhash *dirh)
146 if (dirh == NULL)
149 if (dirh->size == 0)
153 while ((dirh_e = LIST_FIRST(&dirh->entries[hashline]))
160 while ((dirh_e = LIST_FIRST(&dirh->free_entries)) != NULL) {
165 dirh->flags &= ~DIRH_COMPLETE;
166 dirh->flags |= DIRH_PURGED;
167 dirh->num_files = 0;
169 dirhashsize -= dirh->size;
170 dirh->size = 0;
176 struct dirhash *dirh = *dirhp;
178 if (dirh == NULL)
182 dirhash_purge_entries(dirh);
186 TAILQ_REMOVE(&dirhash_queue, dirh, next);
189 pool_put(&dirhash_pool, dirh);
196 struct dirhash *dirh;
200 dirh = *dirhp;
201 if (dirh == NULL) {
202 dirh = pool_get(&dirhash_pool, PR_WAITOK | PR_ZERO);
204 LIST_INIT(&dirh->entries[hashline]);
212 TAILQ_REMOVE(&dirhash_queue, dirh, next);
214 dirh->refcnt++;
215 TAILQ_INSERT_HEAD(&dirhash_queue, dirh, next);
218 *dirhp = dirh;
222 dirhash_put(struct dirhash *dirh)
226 dirh->refcnt--;
231 dirhash_enter(struct dirhash *dirh,
240 KASSERT(dirh);
241 KASSERT(dirh->refcnt > 0);
244 if (!new_p && (dirh->flags & DIRH_COMPLETE))
253 LIST_FOREACH(dirh_e, &dirh->entries[hashline], next) {
270 LIST_FOREACH(dirh_e, &dirh->free_entries, next) {
288 if (del_dirh == dirh)
306 dirh->size += sizeof(struct dirhash_entry);
307 dirh->num_files++;
309 LIST_INSERT_HEAD(&dirh->entries[hashline], dirh_e, next);
313 dirhash_enter_freed(struct dirhash *dirh, uint64_t offset, uint32_t entry_size)
318 KASSERT(dirh);
319 KASSERT(dirh->refcnt > 0);
322 LIST_FOREACH(dirh_e, &dirh->free_entries, next) {
336 LIST_INSERT_HEAD(&dirh->free_entries, dirh_e, next);
337 dirh->size += sizeof(struct dirhash_entry);
342 dirhash_remove(struct dirhash *dirh, struct dirent *dirent,
353 KASSERT(dirh);
354 KASSERT(dirh->refcnt > 0);
362 LIST_FOREACH(dirh_e, &dirh->entries[hashline], next) {
373 dirh->size -= sizeof(struct dirhash_entry);
374 KASSERT(dirh->num_files > 0);
375 dirh->num_files--;
378 dirhash_enter_freed(dirh, offset, entry_size);
391 dirhash_lookup(struct dirhash *dirh, const char *d_name, int d_namlen,
398 KASSERT(dirh);
399 KASSERT(dirh->refcnt > 0);
412 dirh_e = LIST_FIRST(&dirh->entries[hashline]);
435 dirhash_lookup_freed(struct dirhash *dirh, uint32_t min_entrysize,
441 KASSERT(dirh);
442 KASSERT(dirh->refcnt > 0);
449 dirh_e = LIST_FIRST(&dirh->free_entries);
466 dirhash_dir_isempty(struct dirhash *dirh)
474 LIST_FOREACH(dirh_e, &dirh->entries[hashline], next) {
479 if (dirh->num_files != num) {
481 "dirh->num_files = %d, counted %d\n",
482 dirh->num_files, num);
483 assert(dirh->num_files == num);
487 KASSERT(dirh->flags & DIRH_COMPLETE);
490 return (dirh->num_files <= 1);