Lines Matching refs:dcp

272 #define	DDFHASH(handle, dcp) ((handle >> 2) & (dcp)->dc_fhash_mask)  argument
301 #define VALID_DIR_CACHE(dcp) ((dircache_t *)(dcp) > DC_RET_LOW_MEM) argument
329 static void dnlc_dir_abort(dircache_t *dcp);
330 static void dnlc_dir_adjust_fhash(dircache_t *dcp);
331 static void dnlc_dir_adjust_nhash(dircache_t *dcp);
1104 dircache_t *dcp; in dnlc_dir_lookup() local
1123 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_lookup()
1124 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_lookup()
1125 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_lookup()
1127 dep = dcp->dc_namehash[hash & dcp->dc_nhash_mask]; in dnlc_dir_lookup()
1139 if (dcp->dc_complete) { in dnlc_dir_lookup()
1161 dircache_t *dcp; in dnlc_dir_start() local
1197 if ((dcp = kmem_zalloc(sizeof (dircache_t), KM_NOSLEEP)) == NULL) { in dnlc_dir_start()
1200 if ((dcp->dc_namehash = kmem_zalloc(sizeof (dcentry_t *), in dnlc_dir_start()
1204 if ((dcp->dc_freehash = kmem_zalloc(sizeof (dcfree_t *), in dnlc_dir_start()
1209 dcp->dc_anchor = dcap; /* set back pointer to anchor */ in dnlc_dir_start()
1210 dcap->dca_dircache = dcp; in dnlc_dir_start()
1213 dcp->dc_next = dc_head.dch_next; in dnlc_dir_start()
1214 dcp->dc_prev = (dircache_t *)&dc_head; in dnlc_dir_start()
1215 dcp->dc_next->dc_prev = dcp; in dnlc_dir_start()
1216 dc_head.dch_next = dcp; in dnlc_dir_start()
1224 if (dcp != NULL) { in dnlc_dir_start()
1225 if (dcp->dc_namehash) { in dnlc_dir_start()
1226 kmem_free(dcp->dc_namehash, sizeof (dcentry_t *)); in dnlc_dir_start()
1228 kmem_free(dcp, sizeof (dircache_t)); in dnlc_dir_start()
1245 dircache_t *dcp; in dnlc_dir_add_entry() local
1286 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_add_entry()
1287 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_add_entry()
1288 dnlc_dir_abort(dcp); in dnlc_dir_add_entry()
1303 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_add_entry()
1304 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_add_entry()
1309 if ((dcp->dc_num_entries + dcp->dc_num_free) > in dnlc_dir_add_entry()
1317 dcp->dc_num_entries++; in dnlc_dir_add_entry()
1318 capacity = (dcp->dc_nhash_mask + 1) << dnlc_dir_hash_size_shift; in dnlc_dir_add_entry()
1319 if (dcp->dc_num_entries >= in dnlc_dir_add_entry()
1321 dnlc_dir_adjust_nhash(dcp); in dnlc_dir_add_entry()
1323 hp = &dcp->dc_namehash[hash & dcp->dc_nhash_mask]; in dnlc_dir_add_entry()
1344 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_add_entry()
1361 dircache_t *dcp; in dnlc_dir_add_space() local
1394 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_add_space()
1395 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_add_space()
1396 dnlc_dir_abort(dcp); in dnlc_dir_add_space()
1412 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_add_space()
1413 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_add_space()
1414 if ((dcp->dc_num_entries + dcp->dc_num_free) > in dnlc_dir_add_space()
1422 dcp->dc_num_free++; in dnlc_dir_add_space()
1423 capacity = (dcp->dc_fhash_mask + 1) << dnlc_dir_hash_size_shift; in dnlc_dir_add_space()
1424 if (dcp->dc_num_free >= in dnlc_dir_add_space()
1426 dnlc_dir_adjust_fhash(dcp); in dnlc_dir_add_space()
1433 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_add_space()
1434 hp = &(dcp->dc_freehash[DDFHASH(handle, dcp)]); in dnlc_dir_add_space()
1453 dircache_t *dcp; in dnlc_dir_complete() local
1456 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_complete()
1457 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_complete()
1458 dcp->dc_complete = B_TRUE; in dnlc_dir_complete()
1468 dnlc_dir_abort(dircache_t *dcp) in dnlc_dir_abort() argument
1472 uint_t nhtsize = dcp->dc_nhash_mask + 1; /* name hash table size */ in dnlc_dir_abort()
1473 uint_t fhtsize = dcp->dc_fhash_mask + 1; /* free hash table size */ in dnlc_dir_abort()
1480 nhp = dcp->dc_namehash[i]; in dnlc_dir_abort()
1488 kmem_free(dcp->dc_namehash, sizeof (dcentry_t *) * nhtsize); in dnlc_dir_abort()
1494 fhp = dcp->dc_freehash[i]; in dnlc_dir_abort()
1501 kmem_free(dcp->dc_freehash, sizeof (dcfree_t *) * fhtsize); in dnlc_dir_abort()
1506 ncs.ncs_dir_num_ents.value.ui64 -= (dcp->dc_num_entries + in dnlc_dir_abort()
1507 dcp->dc_num_free); in dnlc_dir_abort()
1508 kmem_free(dcp, sizeof (dircache_t)); in dnlc_dir_abort()
1518 dircache_t *dcp; in dnlc_dir_purge() local
1522 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_purge()
1523 if (!VALID_DIR_CACHE(dcp)) { in dnlc_dir_purge()
1532 dcp->dc_prev->dc_next = dcp->dc_next; in dnlc_dir_purge()
1533 dcp->dc_next->dc_prev = dcp->dc_prev; in dnlc_dir_purge()
1536 dnlc_dir_abort(dcp); in dnlc_dir_purge()
1546 dircache_t *dcp; in dnlc_dir_rem_entry() local
1558 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_rem_entry()
1559 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_rem_entry()
1560 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_rem_entry()
1561 if (dcp->dc_nhash_mask > 0) { /* ie not minimum */ in dnlc_dir_rem_entry()
1562 capacity = (dcp->dc_nhash_mask + 1) << in dnlc_dir_rem_entry()
1564 if (dcp->dc_num_entries <= in dnlc_dir_rem_entry()
1566 dnlc_dir_adjust_nhash(dcp); in dnlc_dir_rem_entry()
1570 prevpp = &dcp->dc_namehash[hash & dcp->dc_nhash_mask]; in dnlc_dir_rem_entry()
1588 if (--dcp->dc_num_entries < in dnlc_dir_rem_entry()
1600 if (dcp->dc_complete) { in dnlc_dir_rem_entry()
1622 dircache_t *dcp; in dnlc_dir_rem_space_by_len() local
1634 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_rem_space_by_len()
1635 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_rem_space_by_len()
1636 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_rem_space_by_len()
1637 if (dcp->dc_fhash_mask > 0) { /* ie not minimum */ in dnlc_dir_rem_space_by_len()
1638 capacity = (dcp->dc_fhash_mask + 1) << in dnlc_dir_rem_space_by_len()
1640 if (dcp->dc_num_free <= in dnlc_dir_rem_space_by_len()
1642 dnlc_dir_adjust_fhash(dcp); in dnlc_dir_rem_space_by_len()
1649 fhtsize = dcp->dc_fhash_mask + 1; in dnlc_dir_rem_space_by_len()
1651 prevpp = &(dcp->dc_freehash[i]); in dnlc_dir_rem_space_by_len()
1657 dcp->dc_num_free--; in dnlc_dir_rem_space_by_len()
1667 if (dcp->dc_complete) { in dnlc_dir_rem_space_by_len()
1687 dircache_t *dcp; in dnlc_dir_rem_space_by_handle() local
1697 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_rem_space_by_handle()
1698 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_rem_space_by_handle()
1699 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_rem_space_by_handle()
1700 if (dcp->dc_fhash_mask > 0) { /* ie not minimum */ in dnlc_dir_rem_space_by_handle()
1701 capacity = (dcp->dc_fhash_mask + 1) << in dnlc_dir_rem_space_by_handle()
1703 if (dcp->dc_num_free <= in dnlc_dir_rem_space_by_handle()
1705 dnlc_dir_adjust_fhash(dcp); in dnlc_dir_rem_space_by_handle()
1712 prevpp = &(dcp->dc_freehash[DDFHASH(handle, dcp)]); in dnlc_dir_rem_space_by_handle()
1717 dcp->dc_num_free--; in dnlc_dir_rem_space_by_handle()
1725 if (dcp->dc_complete) { in dnlc_dir_rem_space_by_handle()
1745 dircache_t *dcp; in dnlc_dir_update() local
1756 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_update()
1757 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_update()
1758 dcp->dc_actime = ddi_get_lbolt64(); in dnlc_dir_update()
1760 dep = dcp->dc_namehash[hash & dcp->dc_nhash_mask]; in dnlc_dir_update()
1771 if (dcp->dc_complete) { in dnlc_dir_update()
1788 dircache_t *dcp; in dnlc_dir_fini() local
1792 dcp = (dircache_t *)dcap->dca_dircache; in dnlc_dir_fini()
1793 if (VALID_DIR_CACHE(dcp)) { in dnlc_dir_fini()
1798 dcp->dc_prev->dc_next = dcp->dc_next; in dnlc_dir_fini()
1799 dcp->dc_next->dc_prev = dcp->dc_prev; in dnlc_dir_fini()
1801 dcp = NULL; in dnlc_dir_fini()
1807 if (dcp) { in dnlc_dir_fini()
1808 dnlc_dir_abort(dcp); in dnlc_dir_fini()
1831 dircache_t *dcp, *oldest; in dnlc_dir_reclaim() local
1836 dcp = dc_head.dch_next; in dnlc_dir_reclaim()
1838 while (dcp != (dircache_t *)&dc_head) { in dnlc_dir_reclaim()
1840 oldest = dcp; in dnlc_dir_reclaim()
1842 if (dcp->dc_actime < oldest->dc_actime) { in dnlc_dir_reclaim()
1843 oldest = dcp; in dnlc_dir_reclaim()
1846 dcp = dcp->dc_next; in dnlc_dir_reclaim()
1883 dnlc_dir_adjust_nhash(dircache_t *dcp) in dnlc_dir_adjust_nhash() argument
1894 newsize = dcp->dc_num_entries >> dnlc_dir_hash_size_shift; in dnlc_dir_adjust_nhash()
1907 oldsize = dcp->dc_nhash_mask + 1; in dnlc_dir_adjust_nhash()
1908 dcp->dc_nhash_mask = newsizemask = newsize - 1; in dnlc_dir_adjust_nhash()
1914 dep = dcp->dc_namehash[i]; in dnlc_dir_adjust_nhash()
1927 kmem_free(dcp->dc_namehash, sizeof (dcentry_t *) * oldsize); in dnlc_dir_adjust_nhash()
1928 dcp->dc_namehash = newhash; in dnlc_dir_adjust_nhash()
1935 dnlc_dir_adjust_fhash(dircache_t *dcp) in dnlc_dir_adjust_fhash() argument
1945 newsize = dcp->dc_num_free >> dnlc_dir_hash_size_shift; in dnlc_dir_adjust_fhash()
1958 oldsize = dcp->dc_fhash_mask + 1; in dnlc_dir_adjust_fhash()
1959 dcp->dc_fhash_mask = newsize - 1; in dnlc_dir_adjust_fhash()
1965 dfp = dcp->dc_freehash[i]; in dnlc_dir_adjust_fhash()
1969 nhp = &newhash[DDFHASH(tfp->df_handle, dcp)]; in dnlc_dir_adjust_fhash()
1978 kmem_free(dcp->dc_freehash, sizeof (dcfree_t *) * oldsize); in dnlc_dir_adjust_fhash()
1979 dcp->dc_freehash = newhash; in dnlc_dir_adjust_fhash()