diff options
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/uipc_usrreq.c | 6 | ||||
-rw-r--r-- | sys/kern/vfs_extattr.c | 40 | ||||
-rw-r--r-- | sys/kern/vfs_syscalls.c | 40 | ||||
-rw-r--r-- | sys/kern/vfs_vnops.c | 8 | ||||
-rw-r--r-- | sys/kern/vnode_if.src | 40 |
5 files changed, 75 insertions, 59 deletions
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index 8ca43f5..b225c7c 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * From: @(#)uipc_usrreq.c 8.3 (Berkeley) 1/4/94 - * $Id: uipc_usrreq.c,v 1.32 1998/02/06 12:13:28 eivind Exp $ + * $Id: uipc_usrreq.c,v 1.33 1998/04/17 22:36:50 des Exp $ */ #include <sys/param.h> @@ -549,7 +549,9 @@ unp_bind(unp, nam, p) vattr.va_type = VSOCK; vattr.va_mode = (ACCESSPERMS & ~p->p_fd->fd_cmask); VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); - if (error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr)) + error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); + if (error) return (error); vp = nd.ni_vp; vp->v_socket = unp->unp_socket; diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c index e96b515..7fd30cc 100644 --- a/sys/kern/vfs_extattr.c +++ b/sys/kern/vfs_extattr.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94 - * $Id: vfs_syscalls.c,v 1.97 1998/04/08 18:31:57 wosch Exp $ + * $Id: vfs_syscalls.c,v 1.99 1998/04/19 22:20:32 des Exp $ */ /* For 4.3 integer FS ID compatibility */ @@ -1042,6 +1042,7 @@ mknod(p, uap) } else { error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); } } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); @@ -1095,7 +1096,9 @@ mkfifo(p, uap) vattr.va_type = VFIFO; vattr.va_mode = (SCARG(uap, mode) & ALLPERMS) &~ p->p_fd->fd_cmask; VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); - return (VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr)); + error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); + return (error); } /* @@ -1132,10 +1135,6 @@ link(p, uap) if (!error) { if (nd.ni_vp != NULL) { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); - if (nd.ni_dvp == nd.ni_vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); if (nd.ni_vp) vrele(nd.ni_vp); error = EEXIST; @@ -1145,6 +1144,10 @@ link(p, uap) VOP_LEASE(vp, p, p->p_ucred, LEASE_WRITE); error = VOP_LINK(nd.ni_dvp, vp, &nd.ni_cnd); } + if (nd.ni_dvp == nd.ni_vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); } } vrele(vp); @@ -1196,6 +1199,7 @@ symlink(p, uap) vattr.va_mode = ACCESSPERMS &~ p->p_fd->fd_cmask; VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); error = VOP_SYMLINK(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr, path); + vput(nd.ni_dvp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "symlink"); ASSERT_VOP_UNLOCKED(nd.ni_vp, "symlink"); out: @@ -1287,13 +1291,13 @@ unlink(p, uap) error = VOP_REMOVE(nd.ni_dvp, vp, &nd.ni_cnd); } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); - if (nd.ni_dvp == vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); - if (vp != NULLVP) - vput(vp); } + if (nd.ni_dvp == vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); + if (vp != NULLVP) + vput(vp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "unlink"); ASSERT_VOP_UNLOCKED(nd.ni_vp, "unlink"); return (error); @@ -2334,6 +2338,7 @@ mkdir(p, uap) vattr.va_mode = (SCARG(uap, mode) & ACCESSPERMS) &~ p->p_fd->fd_cmask; VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); if (!error) vput(nd.ni_vp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "mkdir"); @@ -2389,12 +2394,13 @@ out: error = VOP_RMDIR(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd); } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); - if (nd.ni_dvp == vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); - vput(vp); } + if (nd.ni_dvp == vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); + if (vp != NULLVP) + vput(vp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "rmdir"); ASSERT_VOP_UNLOCKED(nd.ni_vp, "rmdir"); return (error); diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index e96b515..7fd30cc 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94 - * $Id: vfs_syscalls.c,v 1.97 1998/04/08 18:31:57 wosch Exp $ + * $Id: vfs_syscalls.c,v 1.99 1998/04/19 22:20:32 des Exp $ */ /* For 4.3 integer FS ID compatibility */ @@ -1042,6 +1042,7 @@ mknod(p, uap) } else { error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); } } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); @@ -1095,7 +1096,9 @@ mkfifo(p, uap) vattr.va_type = VFIFO; vattr.va_mode = (SCARG(uap, mode) & ALLPERMS) &~ p->p_fd->fd_cmask; VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); - return (VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr)); + error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); + return (error); } /* @@ -1132,10 +1135,6 @@ link(p, uap) if (!error) { if (nd.ni_vp != NULL) { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); - if (nd.ni_dvp == nd.ni_vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); if (nd.ni_vp) vrele(nd.ni_vp); error = EEXIST; @@ -1145,6 +1144,10 @@ link(p, uap) VOP_LEASE(vp, p, p->p_ucred, LEASE_WRITE); error = VOP_LINK(nd.ni_dvp, vp, &nd.ni_cnd); } + if (nd.ni_dvp == nd.ni_vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); } } vrele(vp); @@ -1196,6 +1199,7 @@ symlink(p, uap) vattr.va_mode = ACCESSPERMS &~ p->p_fd->fd_cmask; VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); error = VOP_SYMLINK(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr, path); + vput(nd.ni_dvp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "symlink"); ASSERT_VOP_UNLOCKED(nd.ni_vp, "symlink"); out: @@ -1287,13 +1291,13 @@ unlink(p, uap) error = VOP_REMOVE(nd.ni_dvp, vp, &nd.ni_cnd); } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); - if (nd.ni_dvp == vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); - if (vp != NULLVP) - vput(vp); } + if (nd.ni_dvp == vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); + if (vp != NULLVP) + vput(vp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "unlink"); ASSERT_VOP_UNLOCKED(nd.ni_vp, "unlink"); return (error); @@ -2334,6 +2338,7 @@ mkdir(p, uap) vattr.va_mode = (SCARG(uap, mode) & ACCESSPERMS) &~ p->p_fd->fd_cmask; VOP_LEASE(nd.ni_dvp, p, p->p_ucred, LEASE_WRITE); error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr); + vput(nd.ni_dvp); if (!error) vput(nd.ni_vp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "mkdir"); @@ -2389,12 +2394,13 @@ out: error = VOP_RMDIR(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd); } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); - if (nd.ni_dvp == vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); - vput(vp); } + if (nd.ni_dvp == vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); + if (vp != NULLVP) + vput(vp); ASSERT_VOP_UNLOCKED(nd.ni_dvp, "rmdir"); ASSERT_VOP_UNLOCKED(nd.ni_vp, "rmdir"); return (error); diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 31d4f2c..efee10e 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94 - * $Id: vfs_vnops.c,v 1.55 1998/04/08 18:31:58 wosch Exp $ + * $Id: vfs_vnops.c,v 1.56 1998/04/10 00:09:04 alex Exp $ */ #include <sys/param.h> @@ -95,8 +95,10 @@ vn_open(ndp, fmode, cmode) if (fmode & O_EXCL) vap->va_vaflags |= VA_EXCLUSIVE; VOP_LEASE(ndp->ni_dvp, p, cred, LEASE_WRITE); - if (error = VOP_CREATE(ndp->ni_dvp, &ndp->ni_vp, - &ndp->ni_cnd, vap)) + error = VOP_CREATE(ndp->ni_dvp, &ndp->ni_vp, + &ndp->ni_cnd, vap); + vput(ndp->ni_dvp); + if (error) return (error); ASSERT_VOP_UNLOCKED(ndp->ni_dvp, "create"); ASSERT_VOP_LOCKED(ndp->ni_vp, "create"); diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src index 922e060..c97d2ad 100644 --- a/sys/kern/vnode_if.src +++ b/sys/kern/vnode_if.src @@ -31,7 +31,7 @@ # SUCH DAMAGE. # # @(#)vnode_if.src 8.12 (Berkeley) 5/14/95 -# $Id: vnode_if.src,v 1.15 1997/10/16 20:32:23 phk Exp $ +# $Id: vnode_if.src,v 1.16 1998/03/08 09:57:26 julian Exp $ # # @@ -77,11 +77,11 @@ vop_cachedlookup { }; # -#% create dvp L U U +#% create dvp L L L #% create vpp - L - # vop_create { - IN WILLRELE struct vnode *dvp; + IN struct vnode *dvp; OUT struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; @@ -93,17 +93,17 @@ vop_create { #% whiteout flag - - - # vop_whiteout { - IN WILLRELE struct vnode *dvp; + IN struct vnode *dvp; IN struct componentname *cnp; IN int flags; }; # -#% mknod dvp L U U +#% mknod dvp L L L #% mknod vpp - X - # vop_mknod { - IN WILLRELE struct vnode *dvp; + IN struct vnode *dvp; OUT WILLRELE struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; @@ -240,21 +240,21 @@ vop_fsync { }; # -#% remove dvp L U U -#% remove vp L U U +#% remove dvp L L L +#% remove vp L L L # vop_remove { - IN WILLRELE struct vnode *dvp; - IN WILLRELE struct vnode *vp; + IN struct vnode *dvp; + IN struct vnode *vp; IN struct componentname *cnp; }; # +#% link tdvp L L L #% link vp U U U -#% link tdvp L U U # vop_link { - IN WILLRELE struct vnode *tdvp; + IN struct vnode *tdvp; IN struct vnode *vp; IN struct componentname *cnp; }; @@ -275,28 +275,28 @@ vop_rename { }; # -#% mkdir dvp L U U +#% mkdir dvp L L L #% mkdir vpp - L - # vop_mkdir { - IN WILLRELE struct vnode *dvp; + IN struct vnode *dvp; OUT struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; }; # -#% rmdir dvp L U U -#% rmdir vp L U U +#% rmdir dvp L L L +#% rmdir vp L L L # vop_rmdir { - IN WILLRELE struct vnode *dvp; - IN WILLRELE struct vnode *vp; + IN struct vnode *dvp; + IN struct vnode *vp; IN struct componentname *cnp; }; # -#% symlink dvp L U U +#% symlink dvp L L L #% symlink vpp - U - # # XXX - note that the return vnode has already been VRELE'ed @@ -304,7 +304,7 @@ vop_rmdir { # possibly with a further namei. # vop_symlink { - IN WILLRELE struct vnode *dvp; + IN struct vnode *dvp; OUT WILLRELE struct vnode **vpp; IN struct componentname *cnp; IN struct vattr *vap; |