diff options
Diffstat (limited to 'sys/nfs')
-rw-r--r-- | sys/nfs/nfs_serv.c | 37 | ||||
-rw-r--r-- | sys/nfs/nfs_vnops.c | 22 |
2 files changed, 25 insertions, 34 deletions
diff --git a/sys/nfs/nfs_serv.c b/sys/nfs/nfs_serv.c index 4b577cb..b938de1 100644 --- a/sys/nfs/nfs_serv.c +++ b/sys/nfs/nfs_serv.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_serv.c 8.3 (Berkeley) 1/12/94 - * $Id: nfs_serv.c,v 1.58 1998/02/09 06:10:35 eivind Exp $ + * $Id: nfs_serv.c,v 1.59 1998/03/30 09:53:56 phk Exp $ */ /* @@ -1458,6 +1458,7 @@ nfsrv_create(nfsd, slp, procp, mrq) vrele(nd.ni_startdir); nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); + vput(nd.ni_dvp); if (!error) { nfsrv_object_create(nd.ni_vp); zfree(namei_zone, nd.ni_cnd.cn_pnbuf); @@ -1485,7 +1486,9 @@ nfsrv_create(nfsd, slp, procp, mrq) } else vap->va_rdev = (dev_t)rdev; nqsrv_getl(nd.ni_dvp, ND_WRITE); - if (error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap)) { + error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); + vput(nd.ni_dvp); + if (error) { vrele(nd.ni_startdir); nfsm_reply(0); } @@ -1666,6 +1669,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq) vrele(nd.ni_startdir); nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); + vput(nd.ni_dvp); if (!error) zfree(namei_zone, nd.ni_cnd.cn_pnbuf); } else { @@ -1677,7 +1681,9 @@ nfsrv_mknod(nfsd, slp, procp, mrq) goto out; } nqsrv_getl(nd.ni_dvp, ND_WRITE); - if (error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap)) { + error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); + vput(nd.ni_dvp); + if (error) { vrele(nd.ni_startdir); goto out; } @@ -1800,12 +1806,13 @@ out: } 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); } if (dirp && v3) { diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); @@ -2098,6 +2105,7 @@ out: nqsrv_getl(vp, ND_WRITE); nqsrv_getl(xp, ND_WRITE); error = VOP_LINK(nd.ni_dvp, vp, &nd.ni_cnd); + vput(nd.ni_dvp); } else { VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); if (nd.ni_dvp == nd.ni_vp) @@ -2209,6 +2217,7 @@ nfsrv_symlink(nfsd, slp, procp, mrq) } nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_SYMLINK(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap, pathcp); + vput(nd.ni_dvp); if (error) vrele(nd.ni_startdir); else { @@ -2343,6 +2352,7 @@ nfsrv_mkdir(nfsd, slp, procp, mrq) } nqsrv_getl(nd.ni_dvp, ND_WRITE); error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); + vput(nd.ni_dvp); if (!error) { vp = nd.ni_vp; bzero((caddr_t)fhp, sizeof(nfh)); @@ -2459,12 +2469,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 == nd.ni_vp) - vrele(nd.ni_dvp); - else - vput(nd.ni_dvp); - vput(vp); } + if (nd.ni_dvp == nd.ni_vp) + vrele(nd.ni_dvp); + else + vput(nd.ni_dvp); + if (vp != NULLVP) + vput(vp); if (dirp) { diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); vrele(dirp); diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c index c25fae5..a3d222f 100644 --- a/sys/nfs/nfs_vnops.c +++ b/sys/nfs/nfs_vnops.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_vnops.c 8.16 (Berkeley) 5/27/95 - * $Id: nfs_vnops.c,v 1.82 1998/03/28 12:04:40 bde Exp $ + * $Id: nfs_vnops.c,v 1.83 1998/03/30 09:54:32 phk Exp $ */ @@ -1212,12 +1212,10 @@ nfs_mknodrpc(dvp, vpp, cnp, vap) rdev = 0xffffffff; else { VOP_ABORTOP(dvp, cnp); - vput(dvp); return (EOPNOTSUPP); } if (error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred, cnp->cn_proc)) { VOP_ABORTOP(dvp, cnp); - vput(dvp); return (error); } nfsstats.rpccnt[NFSPROC_MKNOD]++; @@ -1273,7 +1271,6 @@ nfs_mknodrpc(dvp, vpp, cnp, vap) VTONFS(dvp)->n_flag |= NMODIFIED; if (!wccflag) VTONFS(dvp)->n_attrstamp = 0; - vput(dvp); return (error); } @@ -1337,7 +1334,6 @@ nfs_create(ap) if (error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred, cnp->cn_proc)) { VOP_ABORTOP(dvp, cnp); - vput(dvp); return (error); } if (vap->va_vaflags & VA_EXCLUSIVE) @@ -1410,7 +1406,6 @@ again: VTONFS(dvp)->n_flag |= NMODIFIED; if (!wccflag) VTONFS(dvp)->n_attrstamp = 0; - vput(dvp); return (error); } @@ -1479,11 +1474,6 @@ nfs_remove(ap) error = nfs_sillyrename(dvp, vp, cnp); zfree(namei_zone, cnp->cn_pnbuf); np->n_attrstamp = 0; - vput(dvp); - if (vp == dvp) - vrele(vp); - else - vput(vp); return (error); } @@ -1686,10 +1676,6 @@ nfs_link(ap) if (vp->v_mount != tdvp->v_mount) { VOP_ABORTOP(vp, cnp); - if (tdvp == vp) - vrele(tdvp); - else - vput(tdvp); return (EXDEV); } @@ -1718,7 +1704,6 @@ nfs_link(ap) VTONFS(vp)->n_attrstamp = 0; if (!wccflag) VTONFS(tdvp)->n_attrstamp = 0; - vput(tdvp); /* * Kludge: Map EEXIST => 0 assuming that it is a reply to a retry. */ @@ -1788,7 +1773,6 @@ nfs_symlink(ap) VTONFS(dvp)->n_flag |= NMODIFIED; if (!wccflag) VTONFS(dvp)->n_attrstamp = 0; - vput(dvp); /* * Kludge: Map EEXIST => 0 assuming that it is a reply to a retry. */ @@ -1829,7 +1813,6 @@ nfs_mkdir(ap) if (error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred, cnp->cn_proc)) { VOP_ABORTOP(dvp, cnp); - vput(dvp); return (error); } len = cnp->cn_namelen; @@ -1882,7 +1865,6 @@ nfs_mkdir(ap) } else *ap->a_vpp = newvp; zfree(namei_zone, cnp->cn_pnbuf); - vput(dvp); return (error); } @@ -1923,8 +1905,6 @@ nfs_rmdir(ap) VTONFS(dvp)->n_attrstamp = 0; cache_purge(dvp); cache_purge(vp); - vput(vp); - vput(dvp); /* * Kludge: Map ENOENT => 0 assuming that you have a reply to a retry. */ |