diff options
author | eivind <eivind@FreeBSD.org> | 2000-01-08 16:20:06 +0000 |
---|---|---|
committer | eivind <eivind@FreeBSD.org> | 2000-01-08 16:20:06 +0000 |
commit | 767bad2cc1f381bd5077391c9521964b65163796 (patch) | |
tree | d74107b7888790b8e1a9aec6400aa6ca12877245 | |
parent | b01aee8509d989b16357d27db2a9e3d106bacc88 (diff) | |
download | FreeBSD-src-767bad2cc1f381bd5077391c9521964b65163796.zip FreeBSD-src-767bad2cc1f381bd5077391c9521964b65163796.tar.gz |
Change NDFREE() from a macro to a function for the time being; the macro
version caused intolerable bloat (30k). I'm likely to revisit this with an
attempt at a smarter macro.
Bloat noticed by: bde
-rw-r--r-- | sys/kern/vfs_export.c | 34 | ||||
-rw-r--r-- | sys/kern/vfs_subr.c | 34 | ||||
-rw-r--r-- | sys/sys/namei.h | 37 |
3 files changed, 69 insertions, 36 deletions
diff --git a/sys/kern/vfs_export.c b/sys/kern/vfs_export.c index f59d819..54c7ad1 100644 --- a/sys/kern/vfs_export.c +++ b/sys/kern/vfs_export.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; + } +} diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index f59d819..54c7ad1 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; + } +} diff --git a/sys/sys/namei.h b/sys/sys/namei.h index e42f8a1..84cd2da 100644 --- a/sys/sys/namei.h +++ b/sys/sys/namei.h @@ -171,42 +171,7 @@ NDINIT(ndp, op, flags, segflg, namep, p) #define NDF_NO_FREE_PNBUF 0x00000020 #define NDF_ONLY_PNBUF (~NDF_NO_FREE_PNBUF) -#define NDFREE(ndp, flags) do { \ - struct nameidata *_ndp = (ndp); \ - unsigned int _flags = (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; \ - } \ -} while (0) - -#endif - -#ifdef _KERNEL +void NDFREE __P((struct nameidata *, const uint)); int namei __P((struct nameidata *ndp)); int lookup __P((struct nameidata *ndp)); |