Lines Matching refs:ncp
453 cache_ncp_invalidate(struct namecache *ncp) in cache_ncp_invalidate() argument
456 KASSERT((ncp->nc_flag & NCF_INVALID) == 0, in cache_ncp_invalidate()
457 ("%s: entry %p already invalid", __func__, ncp)); in cache_ncp_invalidate()
458 atomic_store_char(&ncp->nc_flag, ncp->nc_flag | NCF_INVALID); in cache_ncp_invalidate()
468 #define cache_ncp_canuse(ncp) ({ \ argument
469 struct namecache *_ncp = (ncp); \
480 #define cache_fpl_neg_ncp_canuse(ncp) ({ \ argument
481 struct namecache *_ncp = (ncp); \
547 NCP2NEGLIST(struct namecache *ncp) in NCP2NEGLIST() argument
550 return (&neglists[(((uintptr_t)(ncp) >> 8) & ncneghash)]); in NCP2NEGLIST()
554 NCP2NEGSTATE(struct namecache *ncp) in NCP2NEGSTATE() argument
557 MPASS(atomic_load_char(&ncp->nc_flag) & NCF_NEGATIVE); in NCP2NEGSTATE()
558 return (&ncp->nc_neg); in NCP2NEGSTATE()
578 cache_out_ts(struct namecache *ncp, struct timespec *tsp, int *ticksp) in cache_out_ts() argument
582 KASSERT((ncp->nc_flag & NCF_TS) != 0 || in cache_out_ts()
589 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_out_ts()
654 static void cache_zap_locked(struct namecache *ncp);
757 struct namecache *ncp; in cache_alloc_uma() local
764 ncp = &ncp_ts->nc_nc; in cache_alloc_uma()
767 ncp = uma_zalloc_smr(cache_zone_small, M_WAITOK); in cache_alloc_uma()
769 ncp = uma_zalloc_smr(cache_zone_large, M_WAITOK); in cache_alloc_uma()
771 return (ncp); in cache_alloc_uma()
775 cache_free_uma(struct namecache *ncp) in cache_free_uma() argument
779 if (__predict_false(ncp->nc_flag & NCF_TS)) { in cache_free_uma()
780 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_free_uma()
781 if (ncp->nc_nlen <= CACHE_PATH_CUTOFF) in cache_free_uma()
786 if (ncp->nc_nlen <= CACHE_PATH_CUTOFF) in cache_free_uma()
787 uma_zfree_smr(cache_zone_small, ncp); in cache_free_uma()
789 uma_zfree_smr(cache_zone_large, ncp); in cache_free_uma()
823 cache_free(struct namecache *ncp) in cache_free() argument
826 MPASS(ncp != NULL); in cache_free()
827 if ((ncp->nc_flag & NCF_DVDROP) != 0) { in cache_free()
828 cache_drop_vnode(ncp->nc_dvp); in cache_free()
830 cache_free_uma(ncp); in cache_free()
837 struct namecache *ncp, *nnp; in cache_free_batch() local
843 TAILQ_FOREACH_SAFE(ncp, batch, nc_dst, nnp) { in cache_free_batch()
844 if ((ncp->nc_flag & NCF_DVDROP) != 0) { in cache_free_batch()
845 cache_drop_vnode(ncp->nc_dvp); in cache_free_batch()
847 cache_free_uma(ncp); in cache_free_batch()
917 NCP2BUCKET(struct namecache *ncp) in NCP2BUCKET() argument
921 hash = cache_get_hash(ncp->nc_name, ncp->nc_nlen, ncp->nc_dvp); in NCP2BUCKET()
926 NCP2BUCKETLOCK(struct namecache *ncp) in NCP2BUCKETLOCK() argument
930 hash = cache_get_hash(ncp->nc_name, ncp->nc_nlen, ncp->nc_dvp); in NCP2BUCKETLOCK()
936 cache_assert_bucket_locked(struct namecache *ncp) in cache_assert_bucket_locked() argument
940 blp = NCP2BUCKETLOCK(ncp); in cache_assert_bucket_locked()
945 cache_assert_bucket_unlocked(struct namecache *ncp) in cache_assert_bucket_unlocked() argument
949 blp = NCP2BUCKETLOCK(ncp); in cache_assert_bucket_unlocked()
1137 struct namecache *ncp; in sysctl_debug_hashstat_rawnchash() local
1153 CK_SLIST_FOREACH(ncp, ncpp, nc_hash) in sysctl_debug_hashstat_rawnchash()
1171 struct namecache *ncp; in sysctl_debug_hashstat_nchash() local
1186 CK_SLIST_FOREACH(ncp, ncpp, nc_hash) { in sysctl_debug_hashstat_nchash()
1280 cache_neg_init(struct namecache *ncp) in cache_neg_init() argument
1284 ncp->nc_flag |= NCF_NEGATIVE; in cache_neg_init()
1285 ns = NCP2NEGSTATE(ncp); in cache_neg_init()
1294 cache_neg_hit_prep(struct namecache *ncp) in cache_neg_hit_prep() argument
1299 ns = NCP2NEGSTATE(ncp); in cache_neg_hit_prep()
1315 #define cache_neg_hit_abort(ncp) do { } while (0) argument
1318 cache_neg_hit_finish(struct namecache *ncp) in cache_neg_hit_finish() argument
1321 SDT_PROBE2(vfs, namecache, lookup, hit__negative, ncp->nc_dvp, ncp->nc_name); in cache_neg_hit_finish()
1329 cache_neg_promote_locked(struct namecache *ncp) in cache_neg_promote_locked() argument
1334 ns = NCP2NEGSTATE(ncp); in cache_neg_promote_locked()
1335 nl = NCP2NEGLIST(ncp); in cache_neg_promote_locked()
1338 TAILQ_REMOVE(&nl->nl_list, ncp, nc_dst); in cache_neg_promote_locked()
1339 TAILQ_INSERT_TAIL(&nl->nl_hotlist, ncp, nc_dst); in cache_neg_promote_locked()
1349 cache_neg_demote_locked(struct namecache *ncp) in cache_neg_demote_locked() argument
1354 ns = NCP2NEGSTATE(ncp); in cache_neg_demote_locked()
1355 nl = NCP2NEGLIST(ncp); in cache_neg_demote_locked()
1358 TAILQ_REMOVE(&nl->nl_hotlist, ncp, nc_dst); in cache_neg_demote_locked()
1359 TAILQ_INSERT_TAIL(&nl->nl_list, ncp, nc_dst); in cache_neg_demote_locked()
1378 struct namecache *ncp; in cache_neg_promote_cond() local
1401 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_neg_promote_cond()
1402 if (ncp == oncp) in cache_neg_promote_cond()
1409 if (__predict_false(ncp == NULL)) { in cache_neg_promote_cond()
1416 if (!(ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_neg_promote_cond()
1417 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))) { in cache_neg_promote_cond()
1424 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_neg_promote_cond()
1429 if (!cache_ncp_canuse(ncp)) { in cache_neg_promote_cond()
1433 cache_neg_promote_locked(ncp); in cache_neg_promote_cond()
1434 cache_neg_hit_finish(ncp); in cache_neg_promote_cond()
1445 cache_neg_promote(struct namecache *ncp) in cache_neg_promote() argument
1449 nl = NCP2NEGLIST(ncp); in cache_neg_promote()
1451 cache_neg_promote_locked(ncp); in cache_neg_promote()
1456 cache_neg_insert(struct namecache *ncp) in cache_neg_insert() argument
1460 MPASS(ncp->nc_flag & NCF_NEGATIVE); in cache_neg_insert()
1461 cache_assert_bucket_locked(ncp); in cache_neg_insert()
1462 nl = NCP2NEGLIST(ncp); in cache_neg_insert()
1464 TAILQ_INSERT_TAIL(&nl->nl_list, ncp, nc_dst); in cache_neg_insert()
1470 cache_neg_remove(struct namecache *ncp) in cache_neg_remove() argument
1475 cache_assert_bucket_locked(ncp); in cache_neg_remove()
1476 nl = NCP2NEGLIST(ncp); in cache_neg_remove()
1477 ns = NCP2NEGSTATE(ncp); in cache_neg_remove()
1480 TAILQ_REMOVE(&nl->nl_hotlist, ncp, nc_dst); in cache_neg_remove()
1483 TAILQ_REMOVE(&nl->nl_list, ncp, nc_dst); in cache_neg_remove()
1507 struct namecache *ncp, *lncp; in cache_neg_evict_select_entry() local
1513 ncp = TAILQ_FIRST(&nl->nl_list); in cache_neg_evict_select_entry()
1514 if (ncp == NULL) in cache_neg_evict_select_entry()
1516 lncp = ncp; in cache_neg_evict_select_entry()
1519 ncp = TAILQ_NEXT(ncp, nc_dst); in cache_neg_evict_select_entry()
1520 if (ncp == NULL) in cache_neg_evict_select_entry()
1522 ns = NCP2NEGSTATE(ncp); in cache_neg_evict_select_entry()
1524 lncp = ncp; in cache_neg_evict_select_entry()
1534 struct namecache *ncp, *ncp2; in cache_neg_evict() local
1549 ncp = TAILQ_FIRST(&nl->nl_hotlist); in cache_neg_evict()
1550 if (ncp != NULL) { in cache_neg_evict()
1551 cache_neg_demote_locked(ncp); in cache_neg_evict()
1553 ncp = cache_neg_evict_select_entry(nl); in cache_neg_evict()
1554 if (ncp == NULL) { in cache_neg_evict()
1560 nlen = ncp->nc_nlen; in cache_neg_evict()
1561 dvp = ncp->nc_dvp; in cache_neg_evict()
1562 hash = cache_get_hash(ncp->nc_name, nlen, dvp); in cache_neg_evict()
1574 if (ncp2 == ncp && ncp2->nc_dvp == dvp && in cache_neg_evict()
1580 ncp = NULL; in cache_neg_evict()
1583 MPASS(dvlp == VP2VNODELOCK(ncp->nc_dvp)); in cache_neg_evict()
1584 MPASS(blp == NCP2BUCKETLOCK(ncp)); in cache_neg_evict()
1585 SDT_PROBE2(vfs, namecache, evict_negative, done, ncp->nc_dvp, in cache_neg_evict()
1586 ncp->nc_name); in cache_neg_evict()
1587 cache_zap_locked(ncp); in cache_neg_evict()
1593 if (ncp != NULL) in cache_neg_evict()
1594 cache_free(ncp); in cache_neg_evict()
1633 cache_zap_locked(struct namecache *ncp) in cache_zap_locked() argument
1638 dvp = ncp->nc_dvp; in cache_zap_locked()
1639 vp = ncp->nc_vp; in cache_zap_locked()
1641 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_zap_locked()
1644 cache_assert_bucket_locked(ncp); in cache_zap_locked()
1646 cache_ncp_invalidate(ncp); in cache_zap_locked()
1648 ncpp = NCP2BUCKET(ncp); in cache_zap_locked()
1649 CK_SLIST_REMOVE(ncpp, ncp, namecache, nc_hash); in cache_zap_locked()
1650 if (!(ncp->nc_flag & NCF_NEGATIVE)) { in cache_zap_locked()
1651 SDT_PROBE3(vfs, namecache, zap, done, dvp, ncp->nc_name, vp); in cache_zap_locked()
1652 TAILQ_REMOVE(&vp->v_cache_dst, ncp, nc_dst); in cache_zap_locked()
1653 if (ncp == vp->v_cache_dd) { in cache_zap_locked()
1657 SDT_PROBE2(vfs, namecache, zap_negative, done, dvp, ncp->nc_name); in cache_zap_locked()
1658 cache_neg_remove(ncp); in cache_zap_locked()
1660 if (ncp->nc_flag & NCF_ISDOTDOT) { in cache_zap_locked()
1661 if (ncp == dvp->v_cache_dd) { in cache_zap_locked()
1665 LIST_REMOVE(ncp, nc_src); in cache_zap_locked()
1667 ncp->nc_flag |= NCF_DVDROP; in cache_zap_locked()
1673 cache_zap_negative_locked_vnode_kl(struct namecache *ncp, struct vnode *vp) in cache_zap_negative_locked_vnode_kl() argument
1677 MPASS(ncp->nc_dvp == vp); in cache_zap_negative_locked_vnode_kl()
1678 MPASS(ncp->nc_flag & NCF_NEGATIVE); in cache_zap_negative_locked_vnode_kl()
1681 blp = NCP2BUCKETLOCK(ncp); in cache_zap_negative_locked_vnode_kl()
1683 cache_zap_locked(ncp); in cache_zap_negative_locked_vnode_kl()
1688 cache_zap_locked_vnode_kl2(struct namecache *ncp, struct vnode *vp, in cache_zap_locked_vnode_kl2() argument
1694 MPASS(vp == ncp->nc_dvp || vp == ncp->nc_vp); in cache_zap_locked_vnode_kl2()
1697 if (ncp->nc_flag & NCF_NEGATIVE) { in cache_zap_locked_vnode_kl2()
1702 cache_zap_negative_locked_vnode_kl(ncp, vp); in cache_zap_locked_vnode_kl2()
1707 blp = NCP2BUCKETLOCK(ncp); in cache_zap_locked_vnode_kl2()
1708 vlp1 = VP2VNODELOCK(ncp->nc_dvp); in cache_zap_locked_vnode_kl2()
1709 vlp2 = VP2VNODELOCK(ncp->nc_vp); in cache_zap_locked_vnode_kl2()
1730 cache_zap_locked(ncp); in cache_zap_locked_vnode_kl2()
1750 cache_zap_unlocked_bucket(struct namecache *ncp, struct componentname *cnp, in cache_zap_unlocked_bucket() argument
1757 cache_assert_bucket_unlocked(ncp); in cache_zap_unlocked_bucket()
1763 if (rncp == ncp && rncp->nc_dvp == dvp && in cache_zap_unlocked_bucket()
1772 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_zap_unlocked_bucket()
1792 cache_zap_locked_bucket(struct namecache *ncp, struct componentname *cnp, in cache_zap_locked_bucket() argument
1798 cache_assert_bucket_locked(ncp); in cache_zap_locked_bucket()
1800 dvlp = VP2VNODELOCK(ncp->nc_dvp); in cache_zap_locked_bucket()
1802 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_zap_locked_bucket()
1803 vlp = VP2VNODELOCK(ncp->nc_vp); in cache_zap_locked_bucket()
1805 cache_zap_locked(ncp); in cache_zap_locked_bucket()
1811 dvp = ncp->nc_dvp; in cache_zap_locked_bucket()
1813 return (cache_zap_unlocked_bucket(ncp, cnp, dvp, dvlp, vlp, hash, blp)); in cache_zap_locked_bucket()
1819 struct namecache *ncp; in cache_remove_cnp() local
1831 ncp = dvp->v_cache_dd; in cache_remove_cnp()
1832 if (ncp == NULL) { in cache_remove_cnp()
1839 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0) { in cache_remove_cnp()
1840 if (!cache_zap_locked_vnode_kl2(ncp, dvp, &dvlp2)) in cache_remove_cnp()
1846 cache_free(ncp); in cache_remove_cnp()
1874 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_remove_cnp()
1875 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_remove_cnp()
1876 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_remove_cnp()
1880 if (ncp == NULL) { in cache_remove_cnp()
1885 error = cache_zap_locked_bucket(ncp, cnp, hash, blp); in cache_remove_cnp()
1892 cache_free(ncp); in cache_remove_cnp()
1938 struct namecache *ncp; in cache_lookup_dotdot() local
1954 ncp = dvp->v_cache_dd; in cache_lookup_dotdot()
1955 if (ncp == NULL) { in cache_lookup_dotdot()
1960 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0) { in cache_lookup_dotdot()
1961 if (ncp->nc_flag & NCF_NEGATIVE) in cache_lookup_dotdot()
1964 *vpp = ncp->nc_vp; in cache_lookup_dotdot()
1966 *vpp = ncp->nc_dvp; in cache_lookup_dotdot()
1970 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_dotdot()
1971 if ((ncp->nc_flag & (NCF_ISDOTDOT | NCF_DTS)) == in cache_lookup_dotdot()
1973 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_lookup_dotdot()
1999 cache_zap_negative_locked_vnode_kl(ncp, dvp); in cache_lookup_dotdot()
2001 cache_free(ncp); in cache_lookup_dotdot()
2006 whiteout = (ncp->nc_flag & NCF_WHITE); in cache_lookup_dotdot()
2007 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_dotdot()
2008 if (cache_neg_hit_prep(ncp)) in cache_lookup_dotdot()
2009 cache_neg_promote(ncp); in cache_lookup_dotdot()
2011 cache_neg_hit_finish(ncp); in cache_lookup_dotdot()
2060 struct namecache *ncp; in cache_lookup_fallback() local
2075 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_lookup_fallback()
2076 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_lookup_fallback()
2077 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_lookup_fallback()
2081 if (__predict_false(ncp == NULL)) { in cache_lookup_fallback()
2088 if (ncp->nc_flag & NCF_NEGATIVE) in cache_lookup_fallback()
2092 *vpp = ncp->nc_vp; in cache_lookup_fallback()
2093 SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name, *vpp); in cache_lookup_fallback()
2094 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_fallback()
2111 error = cache_zap_locked_bucket(ncp, cnp, hash, blp); in cache_lookup_fallback()
2116 cache_free(ncp); in cache_lookup_fallback()
2121 whiteout = (ncp->nc_flag & NCF_WHITE); in cache_lookup_fallback()
2122 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_fallback()
2123 if (cache_neg_hit_prep(ncp)) in cache_lookup_fallback()
2124 cache_neg_promote(ncp); in cache_lookup_fallback()
2126 cache_neg_hit_finish(ncp); in cache_lookup_fallback()
2137 struct namecache *ncp; in cache_lookup() local
2170 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_lookup()
2171 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_lookup()
2172 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_lookup()
2176 if (__predict_false(ncp == NULL)) { in cache_lookup()
2183 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_lookup()
2188 *vpp = ncp->nc_vp; in cache_lookup()
2189 SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name, *vpp); in cache_lookup()
2190 cache_out_ts(ncp, tsp, ticksp); in cache_lookup()
2192 if (!cache_ncp_canuse(ncp)) { in cache_lookup()
2217 cache_out_ts(ncp, tsp, ticksp); in cache_lookup()
2218 whiteout = (atomic_load_char(&ncp->nc_flag) & NCF_WHITE); in cache_lookup()
2219 neg_promote = cache_neg_hit_prep(ncp); in cache_lookup()
2220 if (!cache_ncp_canuse(ncp)) { in cache_lookup()
2221 cache_neg_hit_abort(ncp); in cache_lookup()
2227 if (!cache_neg_promote_cond(dvp, cnp, ncp, hash)) in cache_lookup()
2230 cache_neg_hit_finish(ncp); in cache_lookup()
2371 struct namecache *ncp; in cache_enter_lock() local
2381 ncp = atomic_load_consume_ptr(&vp->v_cache_dd); in cache_enter_lock()
2382 if (ncp == NULL) in cache_enter_lock()
2384 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_enter_lock()
2387 MPASS(ncp->nc_dvp == vp); in cache_enter_lock()
2388 blps[1] = NCP2BUCKETLOCK(ncp); in cache_enter_lock()
2391 if (cache_lock_vnodes_cel_3(cel, ncp->nc_vp)) in cache_enter_lock()
2397 if (ncp == vp->v_cache_dd && in cache_enter_lock()
2398 (ncp->nc_flag & NCF_ISDOTDOT) != 0 && in cache_enter_lock()
2399 blps[1] == NCP2BUCKETLOCK(ncp) && in cache_enter_lock()
2400 VP2VNODELOCK(ncp->nc_vp) == cel->vlp[2]) in cache_enter_lock()
2414 struct namecache *ncp; in cache_enter_lock_dd() local
2422 ncp = atomic_load_consume_ptr(&dvp->v_cache_dd); in cache_enter_lock_dd()
2423 if (ncp == NULL) in cache_enter_lock_dd()
2425 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_enter_lock_dd()
2428 MPASS(ncp->nc_dvp == dvp); in cache_enter_lock_dd()
2429 blps[1] = NCP2BUCKETLOCK(ncp); in cache_enter_lock_dd()
2432 if (cache_lock_vnodes_cel_3(cel, ncp->nc_vp)) in cache_enter_lock_dd()
2434 if (ncp == dvp->v_cache_dd && in cache_enter_lock_dd()
2435 (ncp->nc_flag & NCF_ISDOTDOT) != 0 && in cache_enter_lock_dd()
2436 blps[1] == NCP2BUCKETLOCK(ncp) && in cache_enter_lock_dd()
2437 VP2VNODELOCK(ncp->nc_vp) == cel->vlp[2]) in cache_enter_lock_dd()
2460 struct namecache *ncp; in cache_enter_dotdot_prep() local
2470 ncp = dvp->v_cache_dd; in cache_enter_dotdot_prep()
2471 if (ncp != NULL && (ncp->nc_flag & NCF_ISDOTDOT)) { in cache_enter_dotdot_prep()
2472 KASSERT(ncp->nc_dvp == dvp, ("wrong isdotdot parent")); in cache_enter_dotdot_prep()
2473 cache_zap_locked(ncp); in cache_enter_dotdot_prep()
2475 ncp = NULL; in cache_enter_dotdot_prep()
2479 if (ncp != NULL) in cache_enter_dotdot_prep()
2480 cache_free(ncp); in cache_enter_dotdot_prep()
2491 struct namecache *ncp, *n2, *ndd; in cache_enter_time() local
2532 ncp = cache_alloc(cnp->cn_namelen, tsp != NULL); in cache_enter_time()
2533 if (ncp == NULL) in cache_enter_time()
2544 ncp->nc_flag = flag | NCF_WIP; in cache_enter_time()
2545 ncp->nc_vp = vp; in cache_enter_time()
2547 cache_neg_init(ncp); in cache_enter_time()
2548 ncp->nc_dvp = dvp; in cache_enter_time()
2550 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_enter_time()
2559 len = ncp->nc_nlen = cnp->cn_namelen; in cache_enter_time()
2561 memcpy(ncp->nc_name, cnp->cn_nameptr, len); in cache_enter_time()
2562 ncp->nc_name[len] = '\0'; in cache_enter_time()
2593 MPASS((n2->nc_flag & (NCF_TS | NCF_DTS)) == (ncp->nc_flag & (NCF_TS | NCF_DTS))); in cache_enter_time()
2607 SDT_PROBE3(vfs, namecache, enter, duplicate, dvp, ncp->nc_name, in cache_enter_time()
2623 atomic_store_ptr(&dvp->v_cache_dd, ncp); in cache_enter_time()
2640 atomic_store_ptr(&vp->v_cache_dd, ncp); in cache_enter_time()
2652 LIST_INSERT_HEAD(&dvp->v_cache_src, ncp, nc_src); in cache_enter_time()
2661 TAILQ_INSERT_HEAD(&vp->v_cache_dst, ncp, nc_dst); in cache_enter_time()
2662 SDT_PROBE3(vfs, namecache, enter, done, dvp, ncp->nc_name, in cache_enter_time()
2666 atomic_store_char(&ncp->nc_flag, ncp->nc_flag | NCF_WHITE); in cache_enter_time()
2667 cache_neg_insert(ncp); in cache_enter_time()
2669 ncp->nc_name); in cache_enter_time()
2676 CK_SLIST_INSERT_HEAD(ncpp, ncp, nc_hash); in cache_enter_time()
2683 atomic_store_char(&ncp->nc_flag, ncp->nc_flag & ~NCF_WIP); in cache_enter_time()
2691 cache_free(ncp); in cache_enter_time()
2881 struct namecache *ncp; in cache_changesize() local
2911 while ((ncp = CK_SLIST_FIRST(&old_nchashtbl[i])) != NULL) { in cache_changesize()
2912 hash = cache_get_hash(ncp->nc_name, ncp->nc_nlen, in cache_changesize()
2913 ncp->nc_dvp); in cache_changesize()
2914 CK_SLIST_REMOVE(&old_nchashtbl[i], ncp, namecache, nc_hash); in cache_changesize()
2915 CK_SLIST_INSERT_HEAD(&new_nchashtbl[hash & new_nchash], ncp, nc_hash); in cache_changesize()
2934 struct namecache *ncp; in cache_purge_impl() local
2943 ncp = LIST_FIRST(&vp->v_cache_src); in cache_purge_impl()
2944 if (!cache_zap_locked_vnode_kl2(ncp, vp, &vlp2)) in cache_purge_impl()
2946 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_impl()
2949 ncp = TAILQ_FIRST(&vp->v_cache_dst); in cache_purge_impl()
2950 if (!cache_zap_locked_vnode_kl2(ncp, vp, &vlp2)) in cache_purge_impl()
2952 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_impl()
2954 ncp = vp->v_cache_dd; in cache_purge_impl()
2955 if (ncp != NULL) { in cache_purge_impl()
2956 KASSERT(ncp->nc_flag & NCF_ISDOTDOT, in cache_purge_impl()
2958 if (!cache_zap_locked_vnode_kl2(ncp, vp, &vlp2)) in cache_purge_impl()
2960 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_impl()
3025 struct namecache *ncp, *nnp; in cache_purge_negative() local
3034 LIST_FOREACH_SAFE(ncp, &vp->v_cache_src, nc_src, nnp) { in cache_purge_negative()
3035 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_purge_negative()
3037 cache_zap_negative_locked_vnode_kl(ncp, vp); in cache_purge_negative()
3038 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_negative()
3097 struct namecache *ncp; in cache_validate() local
3106 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_validate()
3107 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_validate()
3108 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) { in cache_validate()
3109 if (ncp->nc_vp != vp) in cache_validate()
3111 __func__, vp, ncp->nc_vp, ncp, ncp->nc_name, ncp->nc_dvp); in cache_validate()
3385 struct namecache *ncp; in vn_dd_from_dst() local
3388 TAILQ_FOREACH(ncp, &vp->v_cache_dst, nc_dst) { in vn_dd_from_dst()
3389 if ((ncp->nc_flag & NCF_ISDOTDOT) == 0) in vn_dd_from_dst()
3390 return (ncp); in vn_dd_from_dst()
3399 struct namecache *ncp; in vn_vptocnp() local
3405 ncp = (*vp)->v_cache_dd; in vn_vptocnp()
3406 if (ncp != NULL && (ncp->nc_flag & NCF_ISDOTDOT) == 0) { in vn_vptocnp()
3407 KASSERT(ncp == vn_dd_from_dst(*vp), in vn_vptocnp()
3409 ncp, vn_dd_from_dst(*vp))); in vn_vptocnp()
3411 ncp = vn_dd_from_dst(*vp); in vn_vptocnp()
3413 if (ncp != NULL) { in vn_vptocnp()
3414 if (*buflen < ncp->nc_nlen) { in vn_vptocnp()
3423 *buflen -= ncp->nc_nlen; in vn_vptocnp()
3424 memcpy(buf + *buflen, ncp->nc_name, ncp->nc_nlen); in vn_vptocnp()
3425 SDT_PROBE3(vfs, namecache, fullpath, hit, ncp->nc_dvp, in vn_vptocnp()
3426 ncp->nc_name, vp); in vn_vptocnp()
3428 *vp = ncp->nc_dvp; in vn_vptocnp()
3594 struct namecache *ncp; in vn_fullpath_any_smr() local
3631 ncp = NULL; /* for sdt probe down below */ in vn_fullpath_any_smr()
3662 ncp = atomic_load_consume_ptr(&vp->v_cache_dd); in vn_fullpath_any_smr()
3663 if (ncp == NULL) { in vn_fullpath_any_smr()
3667 nc_flag = atomic_load_char(&ncp->nc_flag); in vn_fullpath_any_smr()
3672 if (ncp->nc_nlen >= *buflen) { in vn_fullpath_any_smr()
3677 *buflen -= ncp->nc_nlen; in vn_fullpath_any_smr()
3678 memcpy(buf + *buflen, ncp->nc_name, ncp->nc_nlen); in vn_fullpath_any_smr()
3681 tvp = ncp->nc_dvp; in vn_fullpath_any_smr()
3694 if (__predict_false(atomic_load_ptr(&vp->v_cache_dd) != ncp)) { in vn_fullpath_any_smr()
3698 if (!cache_ncp_canuse(ncp)) { in vn_fullpath_any_smr()
3716 SDT_PROBE4(vfs, namecache, fullpath_smr, miss, startvp, ncp, reason, i); in vn_fullpath_any_smr()
3843 struct namecache *ncp; in vn_dir_dd_ino() local
3851 TAILQ_FOREACH(ncp, &(vp->v_cache_dst), nc_dst) { in vn_dir_dd_ino()
3852 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0) in vn_dir_dd_ino()
3854 ddvp = ncp->nc_dvp; in vn_dir_dd_ino()
3868 struct namecache *ncp; in vn_commname() local
3874 TAILQ_FOREACH(ncp, &vp->v_cache_dst, nc_dst) in vn_commname()
3875 if ((ncp->nc_flag & NCF_ISDOTDOT) == 0) in vn_commname()
3877 if (ncp == NULL) { in vn_commname()
3881 l = min(ncp->nc_nlen, buflen - 1); in vn_commname()
3882 memcpy(buf, ncp->nc_name, l); in vn_commname()
4031 struct namecache *ncp; in db_print_vpath() local
4035 ncp = TAILQ_FIRST(&vp->v_cache_dst); in db_print_vpath()
4036 if (ncp != NULL) { in db_print_vpath()
4037 ncn = ncp->nc_name; in db_print_vpath()
4038 for (i = 0; i < ncp->nc_nlen; i++) in db_print_vpath()
4040 vp = ncp->nc_dvp; in db_print_vpath()
5278 struct namecache *ncp; in cache_fplookup_dotdot() local
5322 ncp = atomic_load_consume_ptr(&dvp->v_cache_dd); in cache_fplookup_dotdot()
5323 if (ncp == NULL) { in cache_fplookup_dotdot()
5327 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_dotdot()
5331 fpl->tvp = ncp->nc_vp; in cache_fplookup_dotdot()
5333 fpl->tvp = ncp->nc_dvp; in cache_fplookup_dotdot()
5344 if (__predict_false(atomic_load_ptr(&dvp->v_cache_dd) != ncp)) { in cache_fplookup_dotdot()
5348 if (!cache_ncp_canuse(ncp)) { in cache_fplookup_dotdot()
5356 cache_fplookup_neg(struct cache_fpl *fpl, struct namecache *ncp, uint32_t hash) in cache_fplookup_neg() argument
5362 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_neg()
5372 neg_promote = cache_neg_hit_prep(ncp); in cache_fplookup_neg()
5373 if (!cache_fpl_neg_ncp_canuse(ncp)) { in cache_fplookup_neg()
5374 cache_neg_hit_abort(ncp); in cache_fplookup_neg()
5378 return (cache_fplookup_negative_promote(fpl, ncp, hash)); in cache_fplookup_neg()
5380 cache_neg_hit_finish(ncp); in cache_fplookup_neg()
5531 struct namecache *ncp; in cache_fplookup_next() local
5552 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_fplookup_next()
5553 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_fplookup_next()
5554 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_fplookup_next()
5558 if (__predict_false(ncp == NULL)) { in cache_fplookup_next()
5562 tvp = atomic_load_ptr(&ncp->nc_vp); in cache_fplookup_next()
5563 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_next()
5565 return (cache_fplookup_neg(fpl, ncp, hash)); in cache_fplookup_next()
5568 if (!cache_ncp_canuse(ncp)) { in cache_fplookup_next()
5579 SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name, tvp); in cache_fplookup_next()
5958 struct namecache *ncp; in cache_fplookup_trailingslash() local
6050 ncp = atomic_load_consume_ptr(&tvp->v_cache_dd); in cache_fplookup_trailingslash()
6051 if (__predict_false(ncp == NULL)) { in cache_fplookup_trailingslash()
6054 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_trailingslash()
6058 fpl->dvp = ncp->nc_dvp; in cache_fplookup_trailingslash()