diff options
author | phk <phk@FreeBSD.org> | 1999-10-03 12:18:29 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 1999-10-03 12:18:29 +0000 |
commit | 322edeeaa9db24f692a897cb4796b2fb096d1a2c (patch) | |
tree | ec3f444d06a5625603881122124496a55eaa80cb /sys/kern/vfs_extattr.c | |
parent | 0a9033ff881571171d2114a65ff650b7d69e1392 (diff) | |
download | FreeBSD-src-322edeeaa9db24f692a897cb4796b2fb096d1a2c.zip FreeBSD-src-322edeeaa9db24f692a897cb4796b2fb096d1a2c.tar.gz |
Before we start to mess with the VFS name-cache clean things up a little bit:
Isolate the namecache in its own file, and give it a dedicated malloc type.
Diffstat (limited to 'sys/kern/vfs_extattr.c')
-rw-r--r-- | sys/kern/vfs_extattr.c | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index 87c9af8..50684bb 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -3041,101 +3041,6 @@ getvnode(fdp, fd, fpp) *fpp = fp; return (0); } -#ifndef _SYS_SYSPROTO_H_ -struct __getcwd_args { - u_char *buf; - u_int buflen; -}; -#endif - -SYSCTL_DECL(_vfs_cache); -#define STATNODE(mode, name, var) \ - SYSCTL_INT(_vfs_cache, OID_AUTO, name, mode, var, 0, ""); - -static int disablecwd; -SYSCTL_INT(_debug, OID_AUTO, disablecwd, CTLFLAG_RW, &disablecwd, 0, ""); - -static u_long numcwdcalls; STATNODE(CTLFLAG_RD, numcwdcalls, &numcwdcalls); -static u_long numcwdfail1; STATNODE(CTLFLAG_RD, numcwdfail1, &numcwdfail1); -static u_long numcwdfail2; STATNODE(CTLFLAG_RD, numcwdfail2, &numcwdfail2); -static u_long numcwdfail3; STATNODE(CTLFLAG_RD, numcwdfail3, &numcwdfail3); -static u_long numcwdfail4; STATNODE(CTLFLAG_RD, numcwdfail4, &numcwdfail4); -static u_long numcwdfound; STATNODE(CTLFLAG_RD, numcwdfound, &numcwdfound); -int -__getcwd(p, uap) - struct proc *p; - struct __getcwd_args *uap; -{ - char *bp, *buf; - int error, i, slash_prefixed; - struct filedesc *fdp; - struct namecache *ncp; - struct vnode *vp; - - numcwdcalls++; - if (disablecwd) - return (ENODEV); - if (uap->buflen < 2) - return (EINVAL); - if (uap->buflen > MAXPATHLEN) - uap->buflen = MAXPATHLEN; - buf = bp = malloc(uap->buflen, M_TEMP, M_WAITOK); - bp += uap->buflen - 1; - *bp = '\0'; - fdp = p->p_fd; - slash_prefixed = 0; - for (vp = fdp->fd_cdir; vp != fdp->fd_rdir && vp != rootvnode;) { - if (vp->v_flag & VROOT) { - vp = vp->v_mount->mnt_vnodecovered; - continue; - } - if (vp->v_dd->v_id != vp->v_ddid) { - numcwdfail1++; - free(buf, M_TEMP); - return (ENOTDIR); - } - ncp = TAILQ_FIRST(&vp->v_cache_dst); - if (!ncp) { - numcwdfail2++; - free(buf, M_TEMP); - return (ENOENT); - } - if (ncp->nc_dvp != vp->v_dd) { - numcwdfail3++; - free(buf, M_TEMP); - return (EBADF); - } - for (i = ncp->nc_nlen - 1; i >= 0; i--) { - if (bp == buf) { - numcwdfail4++; - free(buf, M_TEMP); - return (ENOMEM); - } - *--bp = ncp->nc_name[i]; - } - if (bp == buf) { - numcwdfail4++; - free(buf, M_TEMP); - return (ENOMEM); - } - *--bp = '/'; - slash_prefixed = 1; - vp = vp->v_dd; - } - if (!slash_prefixed) { - if (bp == buf) { - numcwdfail4++; - free(buf, M_TEMP); - return (ENOMEM); - } - *--bp = '/'; - } - numcwdfound++; - error = copyout(bp, uap->buf, strlen(bp) + 1); - free(buf, M_TEMP); - return (error); -} - /* * Get (NFS) file handle */ |