summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/vfs_cache.c')
-rw-r--r--sys/kern/vfs_cache.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index aea71af..9eecc09 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -1359,6 +1359,28 @@ vn_fullpath1(struct thread *td, struct vnode *vp, struct vnode *rdir,
return (0);
}
+struct vnode *
+vn_dir_dd_ino(struct vnode *vp)
+{
+ struct namecache *ncp;
+ struct vnode *ddvp;
+
+ ASSERT_VOP_LOCKED(vp, "vn_dir_dd_ino");
+ CACHE_RLOCK();
+ TAILQ_FOREACH(ncp, &(vp->v_cache_dst), nc_dst) {
+ if ((ncp->nc_flag & NCF_ISDOTDOT) != 0)
+ continue;
+ ddvp = ncp->nc_dvp;
+ VI_LOCK(ddvp);
+ CACHE_RUNLOCK();
+ if (vget(ddvp, LK_INTERLOCK | LK_SHARED | LK_NOWAIT, curthread))
+ return (NULL);
+ return (ddvp);
+ }
+ CACHE_RUNLOCK();
+ return (NULL);
+}
+
int
vn_commname(struct vnode *vp, char *buf, u_int buflen)
{
OpenPOWER on IntegriCloud