Index: kern/init_main.c =================================================================== RCS file: /b/cvstree/ncvs/src/sys/kern/init_main.c,v retrieving revision 1.83 diff -c -r1.83 init_main.c *** 1.83 1998/02/06 12:13:21 --- init_main.c 1998/02/13 03:43:04 *************** *** 498,504 **** fdp->fd_fd.fd_cdir = rootvnode; VREF(fdp->fd_fd.fd_cdir); VOP_UNLOCK(rootvnode, 0, &proc0); ! fdp->fd_fd.fd_rdir = NULL; } SYSINIT(retrofit, SI_SUB_ROOT_FDTAB, SI_ORDER_FIRST, xxx_vfs_root_fdtab, NULL) --- 498,504 ---- fdp->fd_fd.fd_cdir = rootvnode; VREF(fdp->fd_fd.fd_cdir); VOP_UNLOCK(rootvnode, 0, &proc0); ! fdp->fd_fd.fd_rdir = rootvnode; } SYSINIT(retrofit, SI_SUB_ROOT_FDTAB, SI_ORDER_FIRST, xxx_vfs_root_fdtab, NULL) Index: kern/kern_descrip.c =================================================================== RCS file: /b/cvstree/ncvs/src/sys/kern/kern_descrip.c,v retrieving revision 1.50 diff -c -r1.50 kern_descrip.c *** 1.50 1998/02/06 12:13:22 --- kern_descrip.c 1998/02/13 03:44:40 *************** *** 709,716 **** newfdp->fd_fd.fd_cdir = fdp->fd_cdir; VREF(newfdp->fd_fd.fd_cdir); newfdp->fd_fd.fd_rdir = fdp->fd_rdir; ! if (newfdp->fd_fd.fd_rdir) ! VREF(newfdp->fd_fd.fd_rdir); /* Create the file descriptor table. */ newfdp->fd_fd.fd_refcnt = 1; --- 709,715 ---- newfdp->fd_fd.fd_cdir = fdp->fd_cdir; VREF(newfdp->fd_fd.fd_cdir); newfdp->fd_fd.fd_rdir = fdp->fd_rdir; ! VREF(newfdp->fd_fd.fd_rdir); /* Create the file descriptor table. */ newfdp->fd_fd.fd_refcnt = 1; *************** *** 757,764 **** M_FILEDESC, M_WAITOK); bcopy(fdp, newfdp, sizeof(struct filedesc)); VREF(newfdp->fd_cdir); ! if (newfdp->fd_rdir) ! VREF(newfdp->fd_rdir); newfdp->fd_refcnt = 1; /* --- 756,762 ---- M_FILEDESC, M_WAITOK); bcopy(fdp, newfdp, sizeof(struct filedesc)); VREF(newfdp->fd_cdir); ! VREF(newfdp->fd_rdir); newfdp->fd_refcnt = 1; /* *************** *** 821,828 **** if (fdp->fd_nfiles > NDFILE) FREE(fdp->fd_ofiles, M_FILEDESC); vrele(fdp->fd_cdir); ! if (fdp->fd_rdir) ! vrele(fdp->fd_rdir); FREE(fdp, M_FILEDESC); } --- 819,825 ---- if (fdp->fd_nfiles > NDFILE) FREE(fdp->fd_ofiles, M_FILEDESC); vrele(fdp->fd_cdir); ! vrele(fdp->fd_rdir); FREE(fdp, M_FILEDESC); } Index: kern/vfs_lookup.c =================================================================== RCS file: /b/cvstree/ncvs/src/sys/kern/vfs_lookup.c,v retrieving revision 1.25 diff -c -r1.25 vfs_lookup.c *** 1.25 1998/02/06 12:13:30 --- vfs_lookup.c 1998/02/13 03:45:13 *************** *** 132,139 **** /* * Get starting point for the translation. */ ! if ((ndp->ni_rootdir = fdp->fd_rdir) == NULL) ! ndp->ni_rootdir = rootvnode; dp = fdp->fd_cdir; VREF(dp); for (;;) { --- 132,139 ---- /* * Get starting point for the translation. */ ! ndp->ni_rootdir = fdp->fd_rdir; ! dp = fdp->fd_cdir; VREF(dp); for (;;) { Index: kern/vfs_syscalls.c =================================================================== RCS file: /b/cvstree/ncvs/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.92 diff -c -r1.92 vfs_syscalls.c *** 1.92 1998/02/08 01:41:33 --- vfs_syscalls.c 1998/02/13 03:46:47 *************** *** 804,811 **** SCARG(uap, path), p); if (error = change_dir(&nd, p)) return (error); ! if (fdp->fd_rdir != NULL) ! vrele(fdp->fd_rdir); fdp->fd_rdir = nd.ni_vp; return (0); } --- 804,810 ---- SCARG(uap, path), p); if (error = change_dir(&nd, p)) return (error); ! vrele(fdp->fd_rdir); fdp->fd_rdir = nd.ni_vp; return (0); }