--- sys/kern/vfs_lookup.c.orig +++ sys/kern/vfs_lookup.c @@ -211,7 +211,10 @@ return (error); } } else { - dp = fdp->fd_cdir; + if (ndp->ni_startdir != NULL) + dp = ndp->ni_startdir; + else + dp = fdp->fd_cdir; VREF(dp); FILEDESC_SUNLOCK(fdp); } --- sys/sys/namei.h.orig +++ sys/sys/namei.h @@ -66,7 +66,7 @@ /* * Arguments to lookup. */ - struct vnode *ni_startdir; /* starting directory */ + struct vnode *ni_startdir; /* starting directory */ struct vnode *ni_rootdir; /* logical root directory */ struct vnode *ni_topdir; /* logical top directory */ int ni_dirfd; /* starting directory for *at functions */ @@ -165,6 +165,7 @@ ndp->ni_segflg = segflg; ndp->ni_dirp = namep; ndp->ni_dirfd = dirfd; + ndp->ni_startdir = NULL; ndp->ni_cnd.cn_thread = td; }