From 88191af74ed87fd4dfbc69469c29a77011d40d32 Mon Sep 17 00:00:00 2001 From: Jan-Simon Pendry Date: Fri, 19 May 1995 00:16:14 -0800 Subject: [PATCH] convert VOP_UNLOCK and vrele into vput's; add proc parameter to union_dircache SCCS-vsn: sys/kern/vfs_syscalls.c 8.38 --- usr/src/sys/kern/vfs_syscalls.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/usr/src/sys/kern/vfs_syscalls.c b/usr/src/sys/kern/vfs_syscalls.c index 0fd13333ed..ca8d6e1fce 100644 --- a/usr/src/sys/kern/vfs_syscalls.c +++ b/usr/src/sys/kern/vfs_syscalls.c @@ -9,7 +9,7 @@ * * %sccs.include.redist.c% * - * @(#)vfs_syscalls.c 8.37 (Berkeley) %G% + * @(#)vfs_syscalls.c 8.38 (Berkeley) %G% */ #include @@ -610,11 +610,11 @@ fchdir(p, uap, retval) vput(vp); vp = tdp; } - VOP_UNLOCK(vp, 0, p); if (error) { - vrele(vp); + vput(vp); return (error); } + VOP_UNLOCK(vp, 0, p); vrele(fdp->fd_cdir); fdp->fd_cdir = vp; return (0); @@ -691,9 +691,10 @@ change_dir(ndp, p) error = ENOTDIR; else error = VOP_ACCESS(vp, VEXEC, p->p_ucred, p); - VOP_UNLOCK(vp, 0, p); if (error) - vrele(vp); + vput(vp); + else + VOP_UNLOCK(vp, 0, p); return (error); } @@ -2202,13 +2203,13 @@ unionread: #ifdef UNION { extern int (**union_vnodeop_p)(); - extern struct vnode *union_dircache __P((struct vnode *)); + extern struct vnode *union_dircache __P((struct vnode*, struct proc*)); if ((SCARG(uap, count) == auio.uio_resid) && (vp->v_op == union_vnodeop_p)) { struct vnode *lvp; - lvp = union_dircache(vp); + lvp = union_dircache(vp, p); if (lvp != NULLVP) { struct vattr va; @@ -2225,12 +2226,11 @@ unionread: if (lvp != NULLVP) { error = VOP_OPEN(lvp, FREAD, fp->f_cred, p); - VOP_UNLOCK(lvp, 0, p); - if (error) { - vrele(lvp); + vput(lvp); return (error); } + VOP_UNLOCK(lvp, 0, p); fp->f_data = (caddr_t) lvp; fp->f_offset = 0; error = vn_close(vp, FREAD, fp->f_cred, p); @@ -2310,13 +2310,13 @@ unionread: #ifdef UNION { extern int (**union_vnodeop_p)(); - extern struct vnode *union_dircache __P((struct vnode *)); + extern struct vnode *union_dircache __P((struct vnode*, struct proc*)); if ((SCARG(uap, count) == auio.uio_resid) && (vp->v_op == union_vnodeop_p)) { struct vnode *lvp; - lvp = union_dircache(vp); + lvp = union_dircache(vp, p); if (lvp != NULLVP) { struct vattr va; @@ -2330,15 +2330,14 @@ unionread: lvp = NULL; } } - + if (lvp != NULLVP) { error = VOP_OPEN(lvp, FREAD, fp->f_cred, p); - VOP_UNLOCK(lvp, 0, p); - if (error) { - vrele(lvp); + vput(lvp); return (error); } + VOP_UNLOCK(lvp, 0, p); fp->f_data = (caddr_t) lvp; fp->f_offset = 0; error = vn_close(vp, FREAD, fp->f_cred, p); -- 2.20.1