diff options
author | Eivind Eklund <eivind@FreeBSD.org> | 2000-01-08 16:20:06 +0000 |
---|---|---|
committer | Eivind Eklund <eivind@FreeBSD.org> | 2000-01-08 16:20:06 +0000 |
commit | e12d97d239f79287070282c963d0d00ecc512316 (patch) | |
tree | be9a879a6880b7b02bab2bfd47fa52343b0aa728 /sys/kern/vfs_subr.c | |
parent | 8ab2eee110b1b1e746a81eba893c187cbac41564 (diff) |
Notes
Diffstat (limited to 'sys/kern/vfs_subr.c')
-rw-r--r-- | sys/kern/vfs_subr.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index f59d819f2000..54c7ad1d501d 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -56,6 +56,7 @@ #include <sys/kthread.h> #include <sys/malloc.h> #include <sys/mount.h> +#include <sys/namei.h> #include <sys/proc.h> #include <sys/reboot.h> #include <sys/socket.h> @@ -2888,3 +2889,36 @@ vn_isdisk(vp) return (1); } +void +NDFREE(ndp, flags) + struct nameidata *ndp; + const uint flags; +{ + if (!(flags & NDF_NO_FREE_PNBUF) && + (ndp->ni_cnd.cn_flags & HASBUF)) { + zfree(namei_zone, ndp->ni_cnd.cn_pnbuf); + ndp->ni_cnd.cn_flags &= ~HASBUF; + } + if (!(flags & NDF_NO_DVP_UNLOCK) && + (ndp->ni_cnd.cn_flags & LOCKPARENT) && + ndp->ni_dvp != ndp->ni_vp) + VOP_UNLOCK(ndp->ni_dvp, 0, ndp->ni_cnd.cn_proc); + if (!(flags & NDF_NO_DVP_RELE) && + (ndp->ni_cnd.cn_flags & (LOCKPARENT|WANTPARENT))) { + vrele(ndp->ni_dvp); + ndp->ni_dvp = NULL; + } + if (!(flags & NDF_NO_VP_UNLOCK) && + (ndp->ni_cnd.cn_flags & LOCKLEAF) && ndp->ni_vp) + VOP_UNLOCK(ndp->ni_vp, 0, ndp->ni_cnd.cn_proc); + if (!(flags & NDF_NO_VP_RELE) && + ndp->ni_vp) { + vrele(ndp->ni_vp); + ndp->ni_vp = NULL; + } + if (!(flags & NDF_NO_STARTDIR_RELE) && + (ndp->ni_cnd.cn_flags & SAVESTART)) { + vrele(ndp->ni_startdir); + ndp->ni_startdir = NULL; + } +} |