summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_extattr.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1999-10-03 12:18:29 +0000
committerphk <phk@FreeBSD.org>1999-10-03 12:18:29 +0000
commit322edeeaa9db24f692a897cb4796b2fb096d1a2c (patch)
treeec3f444d06a5625603881122124496a55eaa80cb /sys/kern/vfs_extattr.c
parent0a9033ff881571171d2114a65ff650b7d69e1392 (diff)
downloadFreeBSD-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.c95
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
*/
OpenPOWER on IntegriCloud