Lines Matching refs:ncp

366 cache_ncp_invalidate(struct namecache *ncp)  in cache_ncp_invalidate()  argument
369 KASSERT((ncp->nc_flag & NCF_INVALID) == 0, in cache_ncp_invalidate()
370 ("%s: entry %p already invalid", __func__, ncp)); in cache_ncp_invalidate()
371 atomic_store_char(&ncp->nc_flag, ncp->nc_flag | NCF_INVALID); in cache_ncp_invalidate()
381 #define cache_ncp_canuse(ncp) ({ \ argument
382 struct namecache *_ncp = (ncp); \
393 #define cache_fpl_neg_ncp_canuse(ncp) ({ \ argument
394 struct namecache *_ncp = (ncp); \
460 NCP2NEGLIST(struct namecache *ncp) in NCP2NEGLIST() argument
463 return (&neglists[(((uintptr_t)(ncp) >> 8) & ncneghash)]); in NCP2NEGLIST()
467 NCP2NEGSTATE(struct namecache *ncp) in NCP2NEGSTATE() argument
470 MPASS(atomic_load_char(&ncp->nc_flag) & NCF_NEGATIVE); in NCP2NEGSTATE()
471 return (&ncp->nc_neg); in NCP2NEGSTATE()
491 cache_out_ts(struct namecache *ncp, struct timespec *tsp, int *ticksp) in cache_out_ts() argument
495 KASSERT((ncp->nc_flag & NCF_TS) != 0 || in cache_out_ts()
502 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_out_ts()
567 static void cache_zap_locked(struct namecache *ncp);
670 struct namecache *ncp; in cache_alloc_uma() local
677 ncp = &ncp_ts->nc_nc; in cache_alloc_uma()
680 ncp = uma_zalloc_smr(cache_zone_small, M_WAITOK); in cache_alloc_uma()
682 ncp = uma_zalloc_smr(cache_zone_large, M_WAITOK); in cache_alloc_uma()
684 return (ncp); in cache_alloc_uma()
688 cache_free_uma(struct namecache *ncp) in cache_free_uma() argument
692 if (__predict_false(ncp->nc_flag & NCF_TS)) { in cache_free_uma()
693 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_free_uma()
694 if (ncp->nc_nlen <= CACHE_PATH_CUTOFF) in cache_free_uma()
699 if (ncp->nc_nlen <= CACHE_PATH_CUTOFF) in cache_free_uma()
700 uma_zfree_smr(cache_zone_small, ncp); in cache_free_uma()
702 uma_zfree_smr(cache_zone_large, ncp); in cache_free_uma()
736 cache_free(struct namecache *ncp) in cache_free() argument
739 MPASS(ncp != NULL); in cache_free()
740 if ((ncp->nc_flag & NCF_DVDROP) != 0) { in cache_free()
741 cache_drop_vnode(ncp->nc_dvp); in cache_free()
743 cache_free_uma(ncp); in cache_free()
750 struct namecache *ncp, *nnp; in cache_free_batch() local
756 TAILQ_FOREACH_SAFE(ncp, batch, nc_dst, nnp) { in cache_free_batch()
757 if ((ncp->nc_flag & NCF_DVDROP) != 0) { in cache_free_batch()
758 cache_drop_vnode(ncp->nc_dvp); in cache_free_batch()
760 cache_free_uma(ncp); in cache_free_batch()
830 NCP2BUCKET(struct namecache *ncp) in NCP2BUCKET() argument
834 hash = cache_get_hash(ncp->nc_name, ncp->nc_nlen, ncp->nc_dvp); in NCP2BUCKET()
839 NCP2BUCKETLOCK(struct namecache *ncp) in NCP2BUCKETLOCK() argument
843 hash = cache_get_hash(ncp->nc_name, ncp->nc_nlen, ncp->nc_dvp); in NCP2BUCKETLOCK()
849 cache_assert_bucket_locked(struct namecache *ncp) in cache_assert_bucket_locked() argument
853 blp = NCP2BUCKETLOCK(ncp); in cache_assert_bucket_locked()
858 cache_assert_bucket_unlocked(struct namecache *ncp) in cache_assert_bucket_unlocked() argument
862 blp = NCP2BUCKETLOCK(ncp); in cache_assert_bucket_unlocked()
1050 struct namecache *ncp; in sysctl_debug_hashstat_rawnchash() local
1066 CK_SLIST_FOREACH(ncp, ncpp, nc_hash) in sysctl_debug_hashstat_rawnchash()
1084 struct namecache *ncp; in sysctl_debug_hashstat_nchash() local
1099 CK_SLIST_FOREACH(ncp, ncpp, nc_hash) { in sysctl_debug_hashstat_nchash()
1193 cache_neg_init(struct namecache *ncp) in cache_neg_init() argument
1197 ncp->nc_flag |= NCF_NEGATIVE; in cache_neg_init()
1198 ns = NCP2NEGSTATE(ncp); in cache_neg_init()
1207 cache_neg_hit_prep(struct namecache *ncp) in cache_neg_hit_prep() argument
1212 ns = NCP2NEGSTATE(ncp); in cache_neg_hit_prep()
1228 #define cache_neg_hit_abort(ncp) do { } while (0) argument
1231 cache_neg_hit_finish(struct namecache *ncp) in cache_neg_hit_finish() argument
1234 SDT_PROBE2(vfs, namecache, lookup, hit__negative, ncp->nc_dvp, ncp->nc_name); in cache_neg_hit_finish()
1242 cache_neg_promote_locked(struct namecache *ncp) in cache_neg_promote_locked() argument
1247 ns = NCP2NEGSTATE(ncp); in cache_neg_promote_locked()
1248 nl = NCP2NEGLIST(ncp); in cache_neg_promote_locked()
1251 TAILQ_REMOVE(&nl->nl_list, ncp, nc_dst); in cache_neg_promote_locked()
1252 TAILQ_INSERT_TAIL(&nl->nl_hotlist, ncp, nc_dst); in cache_neg_promote_locked()
1262 cache_neg_demote_locked(struct namecache *ncp) in cache_neg_demote_locked() argument
1267 ns = NCP2NEGSTATE(ncp); in cache_neg_demote_locked()
1268 nl = NCP2NEGLIST(ncp); in cache_neg_demote_locked()
1271 TAILQ_REMOVE(&nl->nl_hotlist, ncp, nc_dst); in cache_neg_demote_locked()
1272 TAILQ_INSERT_TAIL(&nl->nl_list, ncp, nc_dst); in cache_neg_demote_locked()
1291 struct namecache *ncp; in cache_neg_promote_cond() local
1314 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_neg_promote_cond()
1315 if (ncp == oncp) in cache_neg_promote_cond()
1322 if (__predict_false(ncp == NULL)) { in cache_neg_promote_cond()
1329 if (!(ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_neg_promote_cond()
1330 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))) { in cache_neg_promote_cond()
1337 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_neg_promote_cond()
1342 if (!cache_ncp_canuse(ncp)) { in cache_neg_promote_cond()
1346 cache_neg_promote_locked(ncp); in cache_neg_promote_cond()
1347 cache_neg_hit_finish(ncp); in cache_neg_promote_cond()
1358 cache_neg_promote(struct namecache *ncp) in cache_neg_promote() argument
1362 nl = NCP2NEGLIST(ncp); in cache_neg_promote()
1364 cache_neg_promote_locked(ncp); in cache_neg_promote()
1369 cache_neg_insert(struct namecache *ncp) in cache_neg_insert() argument
1373 MPASS(ncp->nc_flag & NCF_NEGATIVE); in cache_neg_insert()
1374 cache_assert_bucket_locked(ncp); in cache_neg_insert()
1375 nl = NCP2NEGLIST(ncp); in cache_neg_insert()
1377 TAILQ_INSERT_TAIL(&nl->nl_list, ncp, nc_dst); in cache_neg_insert()
1383 cache_neg_remove(struct namecache *ncp) in cache_neg_remove() argument
1388 cache_assert_bucket_locked(ncp); in cache_neg_remove()
1389 nl = NCP2NEGLIST(ncp); in cache_neg_remove()
1390 ns = NCP2NEGSTATE(ncp); in cache_neg_remove()
1393 TAILQ_REMOVE(&nl->nl_hotlist, ncp, nc_dst); in cache_neg_remove()
1396 TAILQ_REMOVE(&nl->nl_list, ncp, nc_dst); in cache_neg_remove()
1420 struct namecache *ncp, *lncp; in cache_neg_evict_select_entry() local
1426 ncp = TAILQ_FIRST(&nl->nl_list); in cache_neg_evict_select_entry()
1427 if (ncp == NULL) in cache_neg_evict_select_entry()
1429 lncp = ncp; in cache_neg_evict_select_entry()
1432 ncp = TAILQ_NEXT(ncp, nc_dst); in cache_neg_evict_select_entry()
1433 if (ncp == NULL) in cache_neg_evict_select_entry()
1435 ns = NCP2NEGSTATE(ncp); in cache_neg_evict_select_entry()
1437 lncp = ncp; in cache_neg_evict_select_entry()
1447 struct namecache *ncp, *ncp2; in cache_neg_evict() local
1462 ncp = TAILQ_FIRST(&nl->nl_hotlist); in cache_neg_evict()
1463 if (ncp != NULL) { in cache_neg_evict()
1464 cache_neg_demote_locked(ncp); in cache_neg_evict()
1466 ncp = cache_neg_evict_select_entry(nl); in cache_neg_evict()
1467 if (ncp == NULL) { in cache_neg_evict()
1473 nlen = ncp->nc_nlen; in cache_neg_evict()
1474 dvp = ncp->nc_dvp; in cache_neg_evict()
1475 hash = cache_get_hash(ncp->nc_name, nlen, dvp); in cache_neg_evict()
1487 if (ncp2 == ncp && ncp2->nc_dvp == dvp && in cache_neg_evict()
1493 ncp = NULL; in cache_neg_evict()
1496 MPASS(dvlp == VP2VNODELOCK(ncp->nc_dvp)); in cache_neg_evict()
1497 MPASS(blp == NCP2BUCKETLOCK(ncp)); in cache_neg_evict()
1498 SDT_PROBE2(vfs, namecache, evict_negative, done, ncp->nc_dvp, in cache_neg_evict()
1499 ncp->nc_name); in cache_neg_evict()
1500 cache_zap_locked(ncp); in cache_neg_evict()
1506 if (ncp != NULL) in cache_neg_evict()
1507 cache_free(ncp); in cache_neg_evict()
1546 cache_zap_locked(struct namecache *ncp) in cache_zap_locked() argument
1551 dvp = ncp->nc_dvp; in cache_zap_locked()
1552 vp = ncp->nc_vp; in cache_zap_locked()
1554 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_zap_locked()
1557 cache_assert_bucket_locked(ncp); in cache_zap_locked()
1559 cache_ncp_invalidate(ncp); in cache_zap_locked()
1561 ncpp = NCP2BUCKET(ncp); in cache_zap_locked()
1562 CK_SLIST_REMOVE(ncpp, ncp, namecache, nc_hash); in cache_zap_locked()
1563 if (!(ncp->nc_flag & NCF_NEGATIVE)) { in cache_zap_locked()
1564 SDT_PROBE3(vfs, namecache, zap, done, dvp, ncp->nc_name, vp); in cache_zap_locked()
1565 TAILQ_REMOVE(&vp->v_cache_dst, ncp, nc_dst); in cache_zap_locked()
1566 if (ncp == vp->v_cache_dd) { in cache_zap_locked()
1570 SDT_PROBE2(vfs, namecache, zap_negative, done, dvp, ncp->nc_name); in cache_zap_locked()
1571 cache_neg_remove(ncp); in cache_zap_locked()
1573 if (ncp->nc_flag & NCF_ISDOTDOT) { in cache_zap_locked()
1574 if (ncp == dvp->v_cache_dd) { in cache_zap_locked()
1578 LIST_REMOVE(ncp, nc_src); in cache_zap_locked()
1580 ncp->nc_flag |= NCF_DVDROP; in cache_zap_locked()
1586 cache_zap_negative_locked_vnode_kl(struct namecache *ncp, struct vnode *vp) in cache_zap_negative_locked_vnode_kl() argument
1590 MPASS(ncp->nc_dvp == vp); in cache_zap_negative_locked_vnode_kl()
1591 MPASS(ncp->nc_flag & NCF_NEGATIVE); in cache_zap_negative_locked_vnode_kl()
1594 blp = NCP2BUCKETLOCK(ncp); in cache_zap_negative_locked_vnode_kl()
1596 cache_zap_locked(ncp); in cache_zap_negative_locked_vnode_kl()
1601 cache_zap_locked_vnode_kl2(struct namecache *ncp, struct vnode *vp, in cache_zap_locked_vnode_kl2() argument
1607 MPASS(vp == ncp->nc_dvp || vp == ncp->nc_vp); in cache_zap_locked_vnode_kl2()
1610 if (ncp->nc_flag & NCF_NEGATIVE) { in cache_zap_locked_vnode_kl2()
1615 cache_zap_negative_locked_vnode_kl(ncp, vp); in cache_zap_locked_vnode_kl2()
1620 blp = NCP2BUCKETLOCK(ncp); in cache_zap_locked_vnode_kl2()
1621 vlp1 = VP2VNODELOCK(ncp->nc_dvp); in cache_zap_locked_vnode_kl2()
1622 vlp2 = VP2VNODELOCK(ncp->nc_vp); in cache_zap_locked_vnode_kl2()
1643 cache_zap_locked(ncp); in cache_zap_locked_vnode_kl2()
1663 cache_zap_unlocked_bucket(struct namecache *ncp, struct componentname *cnp, in cache_zap_unlocked_bucket() argument
1670 cache_assert_bucket_unlocked(ncp); in cache_zap_unlocked_bucket()
1676 if (rncp == ncp && rncp->nc_dvp == dvp && in cache_zap_unlocked_bucket()
1685 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_zap_unlocked_bucket()
1705 cache_zap_locked_bucket(struct namecache *ncp, struct componentname *cnp, in cache_zap_locked_bucket() argument
1711 cache_assert_bucket_locked(ncp); in cache_zap_locked_bucket()
1713 dvlp = VP2VNODELOCK(ncp->nc_dvp); in cache_zap_locked_bucket()
1715 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_zap_locked_bucket()
1716 vlp = VP2VNODELOCK(ncp->nc_vp); in cache_zap_locked_bucket()
1718 cache_zap_locked(ncp); in cache_zap_locked_bucket()
1724 dvp = ncp->nc_dvp; in cache_zap_locked_bucket()
1726 return (cache_zap_unlocked_bucket(ncp, cnp, dvp, dvlp, vlp, hash, blp)); in cache_zap_locked_bucket()
1732 struct namecache *ncp; in cache_remove_cnp() local
1744 ncp = dvp->v_cache_dd; in cache_remove_cnp()
1745 if (ncp == NULL) { in cache_remove_cnp()
1752 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0) { in cache_remove_cnp()
1753 if (!cache_zap_locked_vnode_kl2(ncp, dvp, &dvlp2)) in cache_remove_cnp()
1759 cache_free(ncp); in cache_remove_cnp()
1787 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_remove_cnp()
1788 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_remove_cnp()
1789 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_remove_cnp()
1793 if (ncp == NULL) { in cache_remove_cnp()
1798 error = cache_zap_locked_bucket(ncp, cnp, hash, blp); in cache_remove_cnp()
1805 cache_free(ncp); in cache_remove_cnp()
1851 struct namecache *ncp; in cache_lookup_dotdot() local
1867 ncp = dvp->v_cache_dd; in cache_lookup_dotdot()
1868 if (ncp == NULL) { in cache_lookup_dotdot()
1873 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0) { in cache_lookup_dotdot()
1874 if (ncp->nc_flag & NCF_NEGATIVE) in cache_lookup_dotdot()
1877 *vpp = ncp->nc_vp; in cache_lookup_dotdot()
1879 *vpp = ncp->nc_dvp; in cache_lookup_dotdot()
1883 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_dotdot()
1884 if ((ncp->nc_flag & (NCF_ISDOTDOT | NCF_DTS)) == in cache_lookup_dotdot()
1886 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_lookup_dotdot()
1912 cache_zap_negative_locked_vnode_kl(ncp, dvp); in cache_lookup_dotdot()
1914 cache_free(ncp); in cache_lookup_dotdot()
1919 whiteout = (ncp->nc_flag & NCF_WHITE); in cache_lookup_dotdot()
1920 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_dotdot()
1921 if (cache_neg_hit_prep(ncp)) in cache_lookup_dotdot()
1922 cache_neg_promote(ncp); in cache_lookup_dotdot()
1924 cache_neg_hit_finish(ncp); in cache_lookup_dotdot()
1973 struct namecache *ncp; in cache_lookup_fallback() local
1988 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_lookup_fallback()
1989 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_lookup_fallback()
1990 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_lookup_fallback()
1994 if (__predict_false(ncp == NULL)) { in cache_lookup_fallback()
2001 if (ncp->nc_flag & NCF_NEGATIVE) in cache_lookup_fallback()
2005 *vpp = ncp->nc_vp; in cache_lookup_fallback()
2006 SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name, *vpp); in cache_lookup_fallback()
2007 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_fallback()
2024 error = cache_zap_locked_bucket(ncp, cnp, hash, blp); in cache_lookup_fallback()
2029 cache_free(ncp); in cache_lookup_fallback()
2034 whiteout = (ncp->nc_flag & NCF_WHITE); in cache_lookup_fallback()
2035 cache_out_ts(ncp, tsp, ticksp); in cache_lookup_fallback()
2036 if (cache_neg_hit_prep(ncp)) in cache_lookup_fallback()
2037 cache_neg_promote(ncp); in cache_lookup_fallback()
2039 cache_neg_hit_finish(ncp); in cache_lookup_fallback()
2050 struct namecache *ncp; in cache_lookup() local
2083 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_lookup()
2084 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_lookup()
2085 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_lookup()
2089 if (__predict_false(ncp == NULL)) { in cache_lookup()
2096 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_lookup()
2101 *vpp = ncp->nc_vp; in cache_lookup()
2102 SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name, *vpp); in cache_lookup()
2103 cache_out_ts(ncp, tsp, ticksp); in cache_lookup()
2105 if (!cache_ncp_canuse(ncp)) { in cache_lookup()
2130 cache_out_ts(ncp, tsp, ticksp); in cache_lookup()
2131 whiteout = (atomic_load_char(&ncp->nc_flag) & NCF_WHITE); in cache_lookup()
2132 neg_promote = cache_neg_hit_prep(ncp); in cache_lookup()
2133 if (!cache_ncp_canuse(ncp)) { in cache_lookup()
2134 cache_neg_hit_abort(ncp); in cache_lookup()
2140 if (!cache_neg_promote_cond(dvp, cnp, ncp, hash)) in cache_lookup()
2143 cache_neg_hit_finish(ncp); in cache_lookup()
2284 struct namecache *ncp; in cache_enter_lock() local
2294 ncp = atomic_load_consume_ptr(&vp->v_cache_dd); in cache_enter_lock()
2295 if (ncp == NULL) in cache_enter_lock()
2297 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_enter_lock()
2300 MPASS(ncp->nc_dvp == vp); in cache_enter_lock()
2301 blps[1] = NCP2BUCKETLOCK(ncp); in cache_enter_lock()
2304 if (cache_lock_vnodes_cel_3(cel, ncp->nc_vp)) in cache_enter_lock()
2310 if (ncp == vp->v_cache_dd && in cache_enter_lock()
2311 (ncp->nc_flag & NCF_ISDOTDOT) != 0 && in cache_enter_lock()
2312 blps[1] == NCP2BUCKETLOCK(ncp) && in cache_enter_lock()
2313 VP2VNODELOCK(ncp->nc_vp) == cel->vlp[2]) in cache_enter_lock()
2327 struct namecache *ncp; in cache_enter_lock_dd() local
2335 ncp = atomic_load_consume_ptr(&dvp->v_cache_dd); in cache_enter_lock_dd()
2336 if (ncp == NULL) in cache_enter_lock_dd()
2338 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_enter_lock_dd()
2341 MPASS(ncp->nc_dvp == dvp); in cache_enter_lock_dd()
2342 blps[1] = NCP2BUCKETLOCK(ncp); in cache_enter_lock_dd()
2345 if (cache_lock_vnodes_cel_3(cel, ncp->nc_vp)) in cache_enter_lock_dd()
2347 if (ncp == dvp->v_cache_dd && in cache_enter_lock_dd()
2348 (ncp->nc_flag & NCF_ISDOTDOT) != 0 && in cache_enter_lock_dd()
2349 blps[1] == NCP2BUCKETLOCK(ncp) && in cache_enter_lock_dd()
2350 VP2VNODELOCK(ncp->nc_vp) == cel->vlp[2]) in cache_enter_lock_dd()
2373 struct namecache *ncp; in cache_enter_dotdot_prep() local
2383 ncp = dvp->v_cache_dd; in cache_enter_dotdot_prep()
2384 if (ncp != NULL && (ncp->nc_flag & NCF_ISDOTDOT)) { in cache_enter_dotdot_prep()
2385 KASSERT(ncp->nc_dvp == dvp, ("wrong isdotdot parent")); in cache_enter_dotdot_prep()
2386 cache_zap_locked(ncp); in cache_enter_dotdot_prep()
2388 ncp = NULL; in cache_enter_dotdot_prep()
2392 if (ncp != NULL) in cache_enter_dotdot_prep()
2393 cache_free(ncp); in cache_enter_dotdot_prep()
2404 struct namecache *ncp, *n2, *ndd; in cache_enter_time() local
2445 ncp = cache_alloc(cnp->cn_namelen, tsp != NULL); in cache_enter_time()
2446 if (ncp == NULL) in cache_enter_time()
2457 ncp->nc_flag = flag | NCF_WIP; in cache_enter_time()
2458 ncp->nc_vp = vp; in cache_enter_time()
2460 cache_neg_init(ncp); in cache_enter_time()
2461 ncp->nc_dvp = dvp; in cache_enter_time()
2463 ncp_ts = __containerof(ncp, struct namecache_ts, nc_nc); in cache_enter_time()
2472 len = ncp->nc_nlen = cnp->cn_namelen; in cache_enter_time()
2474 memcpy(ncp->nc_name, cnp->cn_nameptr, len); in cache_enter_time()
2475 ncp->nc_name[len] = '\0'; in cache_enter_time()
2506 MPASS((n2->nc_flag & (NCF_TS | NCF_DTS)) == (ncp->nc_flag & (NCF_TS | NCF_DTS))); in cache_enter_time()
2520 SDT_PROBE3(vfs, namecache, enter, duplicate, dvp, ncp->nc_name, in cache_enter_time()
2536 atomic_store_ptr(&dvp->v_cache_dd, ncp); in cache_enter_time()
2553 atomic_store_ptr(&vp->v_cache_dd, ncp); in cache_enter_time()
2565 LIST_INSERT_HEAD(&dvp->v_cache_src, ncp, nc_src); in cache_enter_time()
2574 TAILQ_INSERT_HEAD(&vp->v_cache_dst, ncp, nc_dst); in cache_enter_time()
2575 SDT_PROBE3(vfs, namecache, enter, done, dvp, ncp->nc_name, in cache_enter_time()
2579 atomic_store_char(&ncp->nc_flag, ncp->nc_flag | NCF_WHITE); in cache_enter_time()
2580 cache_neg_insert(ncp); in cache_enter_time()
2582 ncp->nc_name); in cache_enter_time()
2589 CK_SLIST_INSERT_HEAD(ncpp, ncp, nc_hash); in cache_enter_time()
2596 atomic_store_char(&ncp->nc_flag, ncp->nc_flag & ~NCF_WIP); in cache_enter_time()
2604 cache_free(ncp); in cache_enter_time()
2794 struct namecache *ncp; in cache_changesize() local
2824 while ((ncp = CK_SLIST_FIRST(&old_nchashtbl[i])) != NULL) { in cache_changesize()
2825 hash = cache_get_hash(ncp->nc_name, ncp->nc_nlen, in cache_changesize()
2826 ncp->nc_dvp); in cache_changesize()
2827 CK_SLIST_REMOVE(&old_nchashtbl[i], ncp, namecache, nc_hash); in cache_changesize()
2828 CK_SLIST_INSERT_HEAD(&new_nchashtbl[hash & new_nchash], ncp, nc_hash); in cache_changesize()
2847 struct namecache *ncp; in cache_purge_impl() local
2856 ncp = LIST_FIRST(&vp->v_cache_src); in cache_purge_impl()
2857 if (!cache_zap_locked_vnode_kl2(ncp, vp, &vlp2)) in cache_purge_impl()
2859 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_impl()
2862 ncp = TAILQ_FIRST(&vp->v_cache_dst); in cache_purge_impl()
2863 if (!cache_zap_locked_vnode_kl2(ncp, vp, &vlp2)) in cache_purge_impl()
2865 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_impl()
2867 ncp = vp->v_cache_dd; in cache_purge_impl()
2868 if (ncp != NULL) { in cache_purge_impl()
2869 KASSERT(ncp->nc_flag & NCF_ISDOTDOT, in cache_purge_impl()
2871 if (!cache_zap_locked_vnode_kl2(ncp, vp, &vlp2)) in cache_purge_impl()
2873 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_impl()
2938 struct namecache *ncp, *nnp; in cache_purge_negative() local
2947 LIST_FOREACH_SAFE(ncp, &vp->v_cache_src, nc_src, nnp) { in cache_purge_negative()
2948 if (!(ncp->nc_flag & NCF_NEGATIVE)) in cache_purge_negative()
2950 cache_zap_negative_locked_vnode_kl(ncp, vp); in cache_purge_negative()
2951 TAILQ_INSERT_TAIL(&batch, ncp, nc_dst); in cache_purge_negative()
3010 struct namecache *ncp; in cache_validate() local
3019 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_validate()
3020 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_validate()
3021 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) { in cache_validate()
3022 if (ncp->nc_vp != vp) in cache_validate()
3024 __func__, vp, ncp->nc_vp, ncp, ncp->nc_name, ncp->nc_dvp); in cache_validate()
3288 struct namecache *ncp; in vn_dd_from_dst() local
3291 TAILQ_FOREACH(ncp, &vp->v_cache_dst, nc_dst) { in vn_dd_from_dst()
3292 if ((ncp->nc_flag & NCF_ISDOTDOT) == 0) in vn_dd_from_dst()
3293 return (ncp); in vn_dd_from_dst()
3302 struct namecache *ncp; in vn_vptocnp() local
3308 ncp = (*vp)->v_cache_dd; in vn_vptocnp()
3309 if (ncp != NULL && (ncp->nc_flag & NCF_ISDOTDOT) == 0) { in vn_vptocnp()
3310 KASSERT(ncp == vn_dd_from_dst(*vp), in vn_vptocnp()
3312 ncp, vn_dd_from_dst(*vp))); in vn_vptocnp()
3314 ncp = vn_dd_from_dst(*vp); in vn_vptocnp()
3316 if (ncp != NULL) { in vn_vptocnp()
3317 if (*buflen < ncp->nc_nlen) { in vn_vptocnp()
3326 *buflen -= ncp->nc_nlen; in vn_vptocnp()
3327 memcpy(buf + *buflen, ncp->nc_name, ncp->nc_nlen); in vn_vptocnp()
3328 SDT_PROBE3(vfs, namecache, fullpath, hit, ncp->nc_dvp, in vn_vptocnp()
3329 ncp->nc_name, vp); in vn_vptocnp()
3331 *vp = ncp->nc_dvp; in vn_vptocnp()
3497 struct namecache *ncp; in vn_fullpath_any_smr() local
3534 ncp = NULL; /* for sdt probe down below */ in vn_fullpath_any_smr()
3565 ncp = atomic_load_consume_ptr(&vp->v_cache_dd); in vn_fullpath_any_smr()
3566 if (ncp == NULL) { in vn_fullpath_any_smr()
3570 nc_flag = atomic_load_char(&ncp->nc_flag); in vn_fullpath_any_smr()
3575 if (ncp->nc_nlen >= *buflen) { in vn_fullpath_any_smr()
3580 *buflen -= ncp->nc_nlen; in vn_fullpath_any_smr()
3581 memcpy(buf + *buflen, ncp->nc_name, ncp->nc_nlen); in vn_fullpath_any_smr()
3584 tvp = ncp->nc_dvp; in vn_fullpath_any_smr()
3597 if (__predict_false(atomic_load_ptr(&vp->v_cache_dd) != ncp)) { in vn_fullpath_any_smr()
3601 if (!cache_ncp_canuse(ncp)) { in vn_fullpath_any_smr()
3619 SDT_PROBE4(vfs, namecache, fullpath_smr, miss, startvp, ncp, reason, i); in vn_fullpath_any_smr()
3746 struct namecache *ncp; in vn_dir_dd_ino() local
3754 TAILQ_FOREACH(ncp, &(vp->v_cache_dst), nc_dst) { in vn_dir_dd_ino()
3755 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0) in vn_dir_dd_ino()
3757 ddvp = ncp->nc_dvp; in vn_dir_dd_ino()
3771 struct namecache *ncp; in vn_commname() local
3777 TAILQ_FOREACH(ncp, &vp->v_cache_dst, nc_dst) in vn_commname()
3778 if ((ncp->nc_flag & NCF_ISDOTDOT) == 0) in vn_commname()
3780 if (ncp == NULL) { in vn_commname()
3784 l = min(ncp->nc_nlen, buflen - 1); in vn_commname()
3785 memcpy(buf, ncp->nc_name, l); in vn_commname()
3934 struct namecache *ncp; in db_print_vpath() local
3938 ncp = TAILQ_FIRST(&vp->v_cache_dst); in db_print_vpath()
3939 if (ncp != NULL) { in db_print_vpath()
3940 ncn = ncp->nc_name; in db_print_vpath()
3941 for (i = 0; i < ncp->nc_nlen; i++) in db_print_vpath()
3943 vp = ncp->nc_dvp; in db_print_vpath()
5181 struct namecache *ncp; in cache_fplookup_dotdot() local
5225 ncp = atomic_load_consume_ptr(&dvp->v_cache_dd); in cache_fplookup_dotdot()
5226 if (ncp == NULL) { in cache_fplookup_dotdot()
5230 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_dotdot()
5234 fpl->tvp = ncp->nc_vp; in cache_fplookup_dotdot()
5236 fpl->tvp = ncp->nc_dvp; in cache_fplookup_dotdot()
5247 if (__predict_false(atomic_load_ptr(&dvp->v_cache_dd) != ncp)) { in cache_fplookup_dotdot()
5251 if (!cache_ncp_canuse(ncp)) { in cache_fplookup_dotdot()
5259 cache_fplookup_neg(struct cache_fpl *fpl, struct namecache *ncp, uint32_t hash) in cache_fplookup_neg() argument
5265 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_neg()
5275 neg_promote = cache_neg_hit_prep(ncp); in cache_fplookup_neg()
5276 if (!cache_fpl_neg_ncp_canuse(ncp)) { in cache_fplookup_neg()
5277 cache_neg_hit_abort(ncp); in cache_fplookup_neg()
5281 return (cache_fplookup_negative_promote(fpl, ncp, hash)); in cache_fplookup_neg()
5283 cache_neg_hit_finish(ncp); in cache_fplookup_neg()
5434 struct namecache *ncp; in cache_fplookup_next() local
5455 CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) { in cache_fplookup_next()
5456 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen && in cache_fplookup_next()
5457 !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) in cache_fplookup_next()
5461 if (__predict_false(ncp == NULL)) { in cache_fplookup_next()
5465 tvp = atomic_load_ptr(&ncp->nc_vp); in cache_fplookup_next()
5466 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_next()
5468 return (cache_fplookup_neg(fpl, ncp, hash)); in cache_fplookup_next()
5471 if (!cache_ncp_canuse(ncp)) { in cache_fplookup_next()
5482 SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name, tvp); in cache_fplookup_next()
5861 struct namecache *ncp; in cache_fplookup_trailingslash() local
5953 ncp = atomic_load_consume_ptr(&tvp->v_cache_dd); in cache_fplookup_trailingslash()
5954 if (__predict_false(ncp == NULL)) { in cache_fplookup_trailingslash()
5957 nc_flag = atomic_load_char(&ncp->nc_flag); in cache_fplookup_trailingslash()
5961 fpl->dvp = ncp->nc_dvp; in cache_fplookup_trailingslash()