Diff for /src/sys/kern/vfs_cache.c between versions 1.18 and 1.19

version 1.18, 2004/04/24 04:43:06 version 1.19, 2004/06/03 15:54:14
Line 1045  STATNODE(numfullpathfail4); Line 1045  STATNODE(numfullpathfail4);
 STATNODE(numfullpathfound);  STATNODE(numfullpathfound);
   
 int  int
textvp_fullpath(struct proc *p, char **retbuf, char **retfreebuf) vn_fullpath(struct proc *p, struct vnode *vn, char **retbuf, char **freebuf) 
 {  {
         char *bp, *buf;          char *bp, *buf;
         int i, slash_prefixed;          int i, slash_prefixed;
         struct filedesc *fdp;          struct filedesc *fdp;
         struct namecache *ncp;          struct namecache *ncp;
        struct vnode *vp, *textvp;        struct vnode *vp;
   
         numfullpathcalls++;          numfullpathcalls++;
         if (disablefullpath)          if (disablefullpath)
                 return (ENODEV);                  return (ENODEV);
        textvp = p->p_textvp;
        if (textvp == NULL)        if (p == NULL)
                 return (EINVAL);                  return (EINVAL);
   
           /* vn is NULL, client wants us to use p->p_textvp */
           if (vn == NULL)
                   if ((vn = p->p_textvp) == NULL)
                           return (EINVAL);
   
         buf = malloc(MAXPATHLEN, M_TEMP, M_WAITOK);          buf = malloc(MAXPATHLEN, M_TEMP, M_WAITOK);
         bp = buf + MAXPATHLEN - 1;          bp = buf + MAXPATHLEN - 1;
         *bp = '\0';          *bp = '\0';
         fdp = p->p_fd;          fdp = p->p_fd;
         slash_prefixed = 0;          slash_prefixed = 0;
        for (vp = textvp; vp != fdp->fd_rdir && vp != rootvnode;) {        for (vp = vn; vp != fdp->fd_rdir && vp != rootvnode;) {
                 if (vp->v_flag & VROOT) {                  if (vp->v_flag & VROOT) {
                         if (vp->v_mount == NULL) {      /* forced unmount */                          if (vp->v_mount == NULL) {      /* forced unmount */
                                 free(buf, M_TEMP);                                  free(buf, M_TEMP);
Line 1074  textvp_fullpath(struct proc *p, char **r Line 1080  textvp_fullpath(struct proc *p, char **r
                         continue;                          continue;
                 }                  }
                 TAILQ_FOREACH(ncp, &vp->v_namecache, nc_vnode) {                  TAILQ_FOREACH(ncp, &vp->v_namecache, nc_vnode) {
                        if (vp == textvp)                        if (vp == vn)
                                 break;                                  break;
                         if (ncp->nc_parent && ncp->nc_parent->nc_vp &&                          if (ncp->nc_parent && ncp->nc_parent->nc_vp &&
                             ncp->nc_nlen > 0) {                              ncp->nc_nlen > 0) {
Line 1113  textvp_fullpath(struct proc *p, char **r Line 1119  textvp_fullpath(struct proc *p, char **r
         }          }
         numfullpathfound++;          numfullpathfound++;
         *retbuf = bp;           *retbuf = bp; 
        *retfreebuf = buf;        *freebuf = buf;
         return (0);          return (0);
 }  }
   

Removed from v.1.18  
changed lines
  Added in v.1.19