Lines Matching refs:ncp

220 cache_free(struct namecache *ncp)
224 if (ncp == NULL)
226 ts = ncp->nc_flag & NCF_TS;
227 if (ncp->nc_nlen <= CACHE_PATH_CUTOFF) {
229 uma_zfree(cache_zone_small_ts, ncp);
231 uma_zfree(cache_zone_small, ncp);
233 uma_zfree(cache_zone_large_ts, ncp);
235 uma_zfree(cache_zone_large, ncp);
239 nc_get_name(struct namecache *ncp)
243 if ((ncp->nc_flag & NCF_TS) == 0)
244 return (ncp->nc_name);
245 ncp_ts = (struct namecache_ts *)ncp;
250 cache_out_ts(struct namecache *ncp, struct timespec *tsp, int *ticksp)
253 KASSERT((ncp->nc_flag & NCF_TS) != 0 ||
258 *tsp = ((struct namecache_ts *)ncp)->nc_time;
260 *ticksp = ((struct namecache_ts *)ncp)->nc_ticks;
309 static void cache_zap(struct namecache *ncp);
329 struct namecache *ncp;
341 LIST_FOREACH(ncp, ncpp, nc_hash) {
360 struct namecache *ncp;
375 LIST_FOREACH(ncp, ncpp, nc_hash) {
412 cache_zap(ncp)
413 struct namecache *ncp;
418 CTR2(KTR_VFS, "cache_zap(%p) vp %p", ncp, ncp->nc_vp);
420 if (ncp->nc_vp != NULL) {
421 SDT_PROBE(vfs, namecache, zap, done, ncp->nc_dvp,
422 nc_get_name(ncp), ncp->nc_vp, 0, 0);
424 SDT_PROBE(vfs, namecache, zap_negative, done, ncp->nc_dvp,
425 nc_get_name(ncp), 0, 0, 0);
429 LIST_REMOVE(ncp, nc_hash);
430 if (ncp->nc_flag & NCF_ISDOTDOT) {
431 if (ncp == ncp->nc_dvp->v_cache_dd)
432 ncp->nc_dvp->v_cache_dd = NULL;
434 LIST_REMOVE(ncp, nc_src);
435 if (LIST_EMPTY(&ncp->nc_dvp->v_cache_src)) {
436 vp = ncp->nc_dvp;
440 if (ncp->nc_vp) {
441 TAILQ_REMOVE(&ncp->nc_vp->v_cache_dst, ncp, nc_dst);
442 if (ncp == ncp->nc_vp->v_cache_dd)
443 ncp->nc_vp->v_cache_dd = NULL;
445 TAILQ_REMOVE(&ncneg, ncp, nc_dst);
449 cache_free(ncp);
479 struct namecache *ncp;
524 ncp = dvp->v_cache_dd;
525 if (ncp->nc_flag & NCF_ISDOTDOT)
526 *vpp = ncp->nc_vp;
528 *vpp = ncp->nc_dvp;
536 cache_out_ts(ncp, tsp, ticksp);
537 if ((ncp->nc_flag & (NCF_ISDOTDOT | NCF_DTS)) ==
539 *tsp = ((struct namecache_ts *)ncp)->
547 LIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) {
549 if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
550 !bcmp(nc_get_name(ncp), cnp->cn_nameptr, ncp->nc_nlen))
555 if (ncp == NULL) {
573 cache_zap(ncp);
579 if (ncp->nc_vp) {
582 *vpp = ncp->nc_vp;
583 CTR4(KTR_VFS, "cache_lookup(%p, %s) found %p via ncp %p",
584 dvp, cnp->cn_nameptr, *vpp, ncp);
585 SDT_PROBE(vfs, namecache, lookup, hit, dvp, nc_get_name(ncp),
587 cache_out_ts(ncp, tsp, ticksp);
598 cache_zap(ncp);
612 TAILQ_REMOVE(&ncneg, ncp, nc_dst);
613 TAILQ_INSERT_TAIL(&ncneg, ncp, nc_dst);
615 if (ncp->nc_flag & NCF_WHITE)
617 SDT_PROBE(vfs, namecache, lookup, hit__negative, dvp, nc_get_name(ncp),
619 cache_out_ts(ncp, tsp, ticksp);
713 struct namecache *ncp, *n2;
748 if ((ncp = dvp->v_cache_dd) != NULL &&
749 ncp->nc_flag & NCF_ISDOTDOT) {
750 KASSERT(ncp->nc_dvp == dvp,
752 if (ncp->nc_vp != NULL) {
753 TAILQ_REMOVE(&ncp->nc_vp->v_cache_dst,
754 ncp, nc_dst);
756 TAILQ_REMOVE(&ncneg, ncp, nc_dst);
761 ncp, nc_dst);
763 TAILQ_INSERT_TAIL(&ncneg, ncp, nc_dst);
766 ncp->nc_vp = vp;
785 ncp = cache_alloc(cnp->cn_namelen, tsp != NULL);
786 ncp->nc_vp = vp;
787 ncp->nc_dvp = dvp;
788 ncp->nc_flag = flag;
790 n3 = (struct namecache_ts *)ncp;
799 len = ncp->nc_nlen = cnp->cn_namelen;
801 strlcpy(nc_get_name(ncp), cnp->cn_nameptr, len + 1);
820 ((struct namecache_ts *)ncp)->nc_time;
822 ((struct namecache_ts *)ncp)->nc_ticks;
825 ((struct namecache_ts *)ncp)->
831 cache_free(ncp);
843 cache_free(ncp);
848 dvp->v_cache_dd = ncp;
855 ncp->nc_flag |= NCF_WHITE;
866 vp->v_cache_dd = ncp;
876 LIST_INSERT_HEAD(ncpp, ncp, nc_hash);
882 LIST_INSERT_HEAD(&dvp->v_cache_src, ncp, nc_src);
891 TAILQ_INSERT_HEAD(&vp->v_cache_dst, ncp, nc_dst);
892 SDT_PROBE(vfs, namecache, enter, done, dvp, nc_get_name(ncp),
895 TAILQ_INSERT_TAIL(&ncneg, ncp, nc_dst);
897 nc_get_name(ncp), 0, 0, 0);
900 ncp = TAILQ_FIRST(&ncneg);
901 KASSERT(ncp->nc_vp == NULL, ("ncp %p vp %p on ncneg",
902 ncp, ncp->nc_vp));
908 cache_zap(ncp);
970 struct namecache *cp, *ncp;
975 LIST_FOREACH_SAFE(cp, &vp->v_cache_src, nc_src, ncp) {
990 struct namecache *ncp, *nnp;
996 LIST_FOREACH_SAFE(ncp, ncpp, nc_hash, nnp) {
997 if (ncp->nc_dvp->v_mount == mp)
998 cache_zap(ncp);
1216 struct namecache *ncp;
1219 TAILQ_FOREACH(ncp, &((*vp)->v_cache_dst), nc_dst) {
1220 if ((ncp->nc_flag & NCF_ISDOTDOT) == 0)
1223 if (ncp != NULL) {
1224 if (*buflen < ncp->nc_nlen) {
1235 *buflen -= ncp->nc_nlen;
1236 memcpy(buf + *buflen, nc_get_name(ncp), ncp->nc_nlen);
1237 SDT_PROBE(vfs, namecache, fullpath, hit, ncp->nc_dvp,
1238 nc_get_name(ncp), vp, 0, 0);
1240 *vp = ncp->nc_dvp;
1399 struct namecache *ncp;
1404 TAILQ_FOREACH(ncp, &(vp->v_cache_dst), nc_dst) {
1405 if ((ncp->nc_flag & NCF_ISDOTDOT) != 0)
1407 ddvp = ncp->nc_dvp;
1421 struct namecache *ncp;
1425 TAILQ_FOREACH(ncp, &vp->v_cache_dst, nc_dst)
1426 if ((ncp->nc_flag & NCF_ISDOTDOT) == 0)
1428 if (ncp == NULL) {
1432 l = min(ncp->nc_nlen, buflen - 1);
1433 memcpy(buf, nc_get_name(ncp), l);