nfs_serv.c (29291) | nfs_serv.c (29653) |
---|---|
1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)nfs_serv.c 8.3 (Berkeley) 1/12/94 | 1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Rick Macklem at The University of Guelph. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * 36 * @(#)nfs_serv.c 8.3 (Berkeley) 1/12/94 |
37 * $Id: nfs_serv.c,v 1.49 1997/09/10 19:52:25 phk Exp $ | 37 * $Id: nfs_serv.c,v 1.50 1997/09/10 20:22:28 phk Exp $ |
38 */ 39 40/* 41 * nfs version 2 and 3 server calls to vnode ops 42 * - these routines generally have 3 phases 43 * 1 - break down and validate rpc request in mbuf list 44 * 2 - do the vnode ops for the request 45 * (surprisingly ?? many are very similar to syscalls in vfs_syscalls.c) --- 397 unchanged lines hidden (view full) --- 443 if (error) { 444 nfsm_reply(NFSX_POSTOPATTR(v3)); 445 nfsm_srvpostop_attr(dirattr_ret, &dirattr); 446 return (0); 447 } 448 449 nqsrv_getl(ndp->ni_startdir, ND_READ); 450 vrele(ndp->ni_startdir); | 38 */ 39 40/* 41 * nfs version 2 and 3 server calls to vnode ops 42 * - these routines generally have 3 phases 43 * 1 - break down and validate rpc request in mbuf list 44 * 2 - do the vnode ops for the request 45 * (surprisingly ?? many are very similar to syscalls in vfs_syscalls.c) --- 397 unchanged lines hidden (view full) --- 443 if (error) { 444 nfsm_reply(NFSX_POSTOPATTR(v3)); 445 nfsm_srvpostop_attr(dirattr_ret, &dirattr); 446 return (0); 447 } 448 449 nqsrv_getl(ndp->ni_startdir, ND_READ); 450 vrele(ndp->ni_startdir); |
451 FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 451 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
452 vp = ndp->ni_vp; 453 bzero((caddr_t)fhp, sizeof(nfh)); 454 fhp->fh_fsid = vp->v_mount->mnt_stat.f_fsid; 455 error = VFS_VPTOFH(vp, &fhp->fh_fid); 456 if (!error) 457 error = VOP_GETATTR(vp, vap, cred, procp); 458 vput(vp); 459 nfsm_reply(NFSX_SRVFH(v3) + NFSX_POSTOPORFATTR(v3) + NFSX_POSTOPATTR(v3)); --- 995 unchanged lines hidden (view full) --- 1455 */ 1456 if (nd.ni_vp == NULL) { 1457 if (vap->va_type == VREG || vap->va_type == VSOCK) { 1458 vrele(nd.ni_startdir); 1459 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1460 error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); 1461 if (!error) { 1462 nfsrv_object_create(nd.ni_vp); | 452 vp = ndp->ni_vp; 453 bzero((caddr_t)fhp, sizeof(nfh)); 454 fhp->fh_fsid = vp->v_mount->mnt_stat.f_fsid; 455 error = VFS_VPTOFH(vp, &fhp->fh_fid); 456 if (!error) 457 error = VOP_GETATTR(vp, vap, cred, procp); 458 vput(vp); 459 nfsm_reply(NFSX_SRVFH(v3) + NFSX_POSTOPORFATTR(v3) + NFSX_POSTOPATTR(v3)); --- 995 unchanged lines hidden (view full) --- 1455 */ 1456 if (nd.ni_vp == NULL) { 1457 if (vap->va_type == VREG || vap->va_type == VSOCK) { 1458 vrele(nd.ni_startdir); 1459 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1460 error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); 1461 if (!error) { 1462 nfsrv_object_create(nd.ni_vp); |
1463 FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1463 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1464 if (exclusive_flag) { 1465 exclusive_flag = 0; 1466 VATTR_NULL(vap); 1467 bcopy(cverf, (caddr_t)&vap->va_atime, 1468 NFSX_V3CREATEVERF); 1469 error = VOP_SETATTR(nd.ni_vp, vap, cred, 1470 procp); 1471 } 1472 } 1473 } else if (vap->va_type == VCHR || vap->va_type == VBLK || 1474 vap->va_type == VFIFO) { 1475 if (vap->va_type == VCHR && rdev == 0xffffffff) 1476 vap->va_type = VFIFO; 1477 if (vap->va_type != VFIFO && 1478 (error = suser(cred, (u_short *)0))) { 1479 vrele(nd.ni_startdir); | 1464 if (exclusive_flag) { 1465 exclusive_flag = 0; 1466 VATTR_NULL(vap); 1467 bcopy(cverf, (caddr_t)&vap->va_atime, 1468 NFSX_V3CREATEVERF); 1469 error = VOP_SETATTR(nd.ni_vp, vap, cred, 1470 procp); 1471 } 1472 } 1473 } else if (vap->va_type == VCHR || vap->va_type == VBLK || 1474 vap->va_type == VFIFO) { 1475 if (vap->va_type == VCHR && rdev == 0xffffffff) 1476 vap->va_type = VFIFO; 1477 if (vap->va_type != VFIFO && 1478 (error = suser(cred, (u_short *)0))) { 1479 vrele(nd.ni_startdir); |
1480 free(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1480 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1481 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1482 vput(nd.ni_dvp); 1483 nfsm_reply(0); 1484 return (error); 1485 } else 1486 vap->va_rdev = (dev_t)rdev; 1487 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1488 if (error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap)) { 1489 vrele(nd.ni_startdir); 1490 nfsm_reply(0); 1491 } 1492 nd.ni_cnd.cn_nameiop = LOOKUP; 1493 nd.ni_cnd.cn_flags &= ~(LOCKPARENT | SAVESTART); 1494 nd.ni_cnd.cn_proc = procp; 1495 nd.ni_cnd.cn_cred = cred; 1496 if (error = lookup(&nd)) { | 1481 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1482 vput(nd.ni_dvp); 1483 nfsm_reply(0); 1484 return (error); 1485 } else 1486 vap->va_rdev = (dev_t)rdev; 1487 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1488 if (error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap)) { 1489 vrele(nd.ni_startdir); 1490 nfsm_reply(0); 1491 } 1492 nd.ni_cnd.cn_nameiop = LOOKUP; 1493 nd.ni_cnd.cn_flags &= ~(LOCKPARENT | SAVESTART); 1494 nd.ni_cnd.cn_proc = procp; 1495 nd.ni_cnd.cn_cred = cred; 1496 if (error = lookup(&nd)) { |
1497 free(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1497 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1498 nfsm_reply(0); 1499 } 1500 nfsrv_object_create(nd.ni_vp); | 1498 nfsm_reply(0); 1499 } 1500 nfsrv_object_create(nd.ni_vp); |
1501 FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1501 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1502 if (nd.ni_cnd.cn_flags & ISSYMLINK) { 1503 vrele(nd.ni_dvp); 1504 vput(nd.ni_vp); 1505 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1506 error = EINVAL; 1507 nfsm_reply(0); 1508 } 1509 } else { 1510 vrele(nd.ni_startdir); | 1502 if (nd.ni_cnd.cn_flags & ISSYMLINK) { 1503 vrele(nd.ni_dvp); 1504 vput(nd.ni_vp); 1505 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1506 error = EINVAL; 1507 nfsm_reply(0); 1508 } 1509 } else { 1510 vrele(nd.ni_startdir); |
1511 free(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1511 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1512 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1513 vput(nd.ni_dvp); 1514 error = ENXIO; 1515 } 1516 vp = nd.ni_vp; 1517 } else { 1518 vrele(nd.ni_startdir); | 1512 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1513 vput(nd.ni_dvp); 1514 error = ENXIO; 1515 } 1516 vp = nd.ni_vp; 1517 } else { 1518 vrele(nd.ni_startdir); |
1519 free(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1519 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1520 vp = nd.ni_vp; 1521 if (nd.ni_dvp == vp) 1522 vrele(nd.ni_dvp); 1523 else 1524 vput(nd.ni_dvp); 1525 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1526 if (vap->va_size != -1) { 1527 error = nfsrv_access(vp, VWRITE, cred, --- 38 unchanged lines hidden (view full) --- 1566 nfsm_srvfillattr(vap, fp); 1567 } 1568 return (0); 1569nfsmout: 1570 if (dirp) 1571 vrele(dirp); 1572 if (nd.ni_cnd.cn_nameiop) { 1573 vrele(nd.ni_startdir); | 1520 vp = nd.ni_vp; 1521 if (nd.ni_dvp == vp) 1522 vrele(nd.ni_dvp); 1523 else 1524 vput(nd.ni_dvp); 1525 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1526 if (vap->va_size != -1) { 1527 error = nfsrv_access(vp, VWRITE, cred, --- 38 unchanged lines hidden (view full) --- 1566 nfsm_srvfillattr(vap, fp); 1567 } 1568 return (0); 1569nfsmout: 1570 if (dirp) 1571 vrele(dirp); 1572 if (nd.ni_cnd.cn_nameiop) { 1573 vrele(nd.ni_startdir); |
1574 free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1574 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1575 } 1576 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1577 if (nd.ni_dvp == nd.ni_vp) 1578 vrele(nd.ni_dvp); 1579 else 1580 vput(nd.ni_dvp); 1581 if (nd.ni_vp) 1582 vput(nd.ni_vp); --- 47 unchanged lines hidden (view full) --- 1630 if (dirp) 1631 vrele(dirp); 1632 return (0); 1633 } 1634 nfsm_dissect(tl, u_long *, NFSX_UNSIGNED); 1635 vtyp = nfsv3tov_type(*tl); 1636 if (vtyp != VCHR && vtyp != VBLK && vtyp != VSOCK && vtyp != VFIFO) { 1637 vrele(nd.ni_startdir); | 1575 } 1576 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1577 if (nd.ni_dvp == nd.ni_vp) 1578 vrele(nd.ni_dvp); 1579 else 1580 vput(nd.ni_dvp); 1581 if (nd.ni_vp) 1582 vput(nd.ni_vp); --- 47 unchanged lines hidden (view full) --- 1630 if (dirp) 1631 vrele(dirp); 1632 return (0); 1633 } 1634 nfsm_dissect(tl, u_long *, NFSX_UNSIGNED); 1635 vtyp = nfsv3tov_type(*tl); 1636 if (vtyp != VCHR && vtyp != VBLK && vtyp != VSOCK && vtyp != VFIFO) { 1637 vrele(nd.ni_startdir); |
1638 free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1638 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1639 error = NFSERR_BADTYPE; 1640 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1641 vput(nd.ni_dvp); 1642 goto out; 1643 } 1644 VATTR_NULL(vap); 1645 nfsm_srvsattr(vap); 1646 if (vtyp == VCHR || vtyp == VBLK) { 1647 nfsm_dissect(tl, u_long *, 2 * NFSX_UNSIGNED); 1648 major = fxdr_unsigned(u_long, *tl++); 1649 minor = fxdr_unsigned(u_long, *tl); 1650 vap->va_rdev = makedev(major, minor); 1651 } 1652 1653 /* 1654 * Iff doesn't exist, create it. 1655 */ 1656 if (nd.ni_vp) { 1657 vrele(nd.ni_startdir); | 1639 error = NFSERR_BADTYPE; 1640 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1641 vput(nd.ni_dvp); 1642 goto out; 1643 } 1644 VATTR_NULL(vap); 1645 nfsm_srvsattr(vap); 1646 if (vtyp == VCHR || vtyp == VBLK) { 1647 nfsm_dissect(tl, u_long *, 2 * NFSX_UNSIGNED); 1648 major = fxdr_unsigned(u_long, *tl++); 1649 minor = fxdr_unsigned(u_long, *tl); 1650 vap->va_rdev = makedev(major, minor); 1651 } 1652 1653 /* 1654 * Iff doesn't exist, create it. 1655 */ 1656 if (nd.ni_vp) { 1657 vrele(nd.ni_startdir); |
1658 free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1658 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1659 error = EEXIST; 1660 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1661 vput(nd.ni_dvp); 1662 goto out; 1663 } 1664 vap->va_type = vtyp; 1665 if (vtyp == VSOCK) { 1666 vrele(nd.ni_startdir); 1667 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1668 error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); 1669 if (!error) | 1659 error = EEXIST; 1660 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1661 vput(nd.ni_dvp); 1662 goto out; 1663 } 1664 vap->va_type = vtyp; 1665 if (vtyp == VSOCK) { 1666 vrele(nd.ni_startdir); 1667 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1668 error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap); 1669 if (!error) |
1670 FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1670 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1671 } else { 1672 if (vtyp != VFIFO && (error = suser(cred, (u_short *)0))) { 1673 vrele(nd.ni_startdir); | 1671 } else { 1672 if (vtyp != VFIFO && (error = suser(cred, (u_short *)0))) { 1673 vrele(nd.ni_startdir); |
1674 free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1674 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1675 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1676 vput(nd.ni_dvp); 1677 goto out; 1678 } 1679 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1680 if (error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap)) { 1681 vrele(nd.ni_startdir); 1682 goto out; 1683 } 1684 nd.ni_cnd.cn_nameiop = LOOKUP; 1685 nd.ni_cnd.cn_flags &= ~(LOCKPARENT | SAVESTART); 1686 nd.ni_cnd.cn_proc = procp; 1687 nd.ni_cnd.cn_cred = procp->p_ucred; 1688 error = lookup(&nd); | 1675 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1676 vput(nd.ni_dvp); 1677 goto out; 1678 } 1679 nqsrv_getl(nd.ni_dvp, ND_WRITE); 1680 if (error = VOP_MKNOD(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap)) { 1681 vrele(nd.ni_startdir); 1682 goto out; 1683 } 1684 nd.ni_cnd.cn_nameiop = LOOKUP; 1685 nd.ni_cnd.cn_flags &= ~(LOCKPARENT | SAVESTART); 1686 nd.ni_cnd.cn_proc = procp; 1687 nd.ni_cnd.cn_cred = procp->p_ucred; 1688 error = lookup(&nd); |
1689 FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1689 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1690 if (error) 1691 goto out; 1692 if (nd.ni_cnd.cn_flags & ISSYMLINK) { 1693 vrele(nd.ni_dvp); 1694 vput(nd.ni_vp); 1695 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1696 error = EINVAL; 1697 } --- 17 unchanged lines hidden (view full) --- 1715 } 1716 nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft); 1717 return (0); 1718nfsmout: 1719 if (dirp) 1720 vrele(dirp); 1721 if (nd.ni_cnd.cn_nameiop) { 1722 vrele(nd.ni_startdir); | 1690 if (error) 1691 goto out; 1692 if (nd.ni_cnd.cn_flags & ISSYMLINK) { 1693 vrele(nd.ni_dvp); 1694 vput(nd.ni_vp); 1695 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1696 error = EINVAL; 1697 } --- 17 unchanged lines hidden (view full) --- 1715 } 1716 nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft); 1717 return (0); 1718nfsmout: 1719 if (dirp) 1720 vrele(dirp); 1721 if (nd.ni_cnd.cn_nameiop) { 1722 vrele(nd.ni_startdir); |
1723 free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI); | 1723 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
1724 } 1725 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1726 if (nd.ni_dvp == nd.ni_vp) 1727 vrele(nd.ni_dvp); 1728 else 1729 vput(nd.ni_dvp); 1730 if (nd.ni_vp) 1731 vput(nd.ni_vp); --- 252 unchanged lines hidden (view full) --- 1984 vput(tvp); 1985 VOP_ABORTOP(fromnd.ni_dvp, &fromnd.ni_cnd); 1986 vrele(fromnd.ni_dvp); 1987 vrele(fvp); 1988 if (error == -1) 1989 error = 0; 1990 } 1991 vrele(tond.ni_startdir); | 1724 } 1725 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 1726 if (nd.ni_dvp == nd.ni_vp) 1727 vrele(nd.ni_dvp); 1728 else 1729 vput(nd.ni_dvp); 1730 if (nd.ni_vp) 1731 vput(nd.ni_vp); --- 252 unchanged lines hidden (view full) --- 1984 vput(tvp); 1985 VOP_ABORTOP(fromnd.ni_dvp, &fromnd.ni_cnd); 1986 vrele(fromnd.ni_dvp); 1987 vrele(fvp); 1988 if (error == -1) 1989 error = 0; 1990 } 1991 vrele(tond.ni_startdir); |
1992 FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI); | 1992 zfree(namei_zone, tond.ni_cnd.cn_pnbuf); |
1993out1: 1994 if (fdirp) { 1995 fdiraft_ret = VOP_GETATTR(fdirp, &fdiraft, cred, procp); 1996 vrele(fdirp); 1997 } 1998 if (tdirp) { 1999 tdiraft_ret = VOP_GETATTR(tdirp, &tdiraft, cred, procp); 2000 vrele(tdirp); 2001 } 2002 vrele(fromnd.ni_startdir); | 1993out1: 1994 if (fdirp) { 1995 fdiraft_ret = VOP_GETATTR(fdirp, &fdiraft, cred, procp); 1996 vrele(fdirp); 1997 } 1998 if (tdirp) { 1999 tdiraft_ret = VOP_GETATTR(tdirp, &tdiraft, cred, procp); 2000 vrele(tdirp); 2001 } 2002 vrele(fromnd.ni_startdir); |
2003 FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI); | 2003 zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf); |
2004 nfsm_reply(2 * NFSX_WCCDATA(v3)); 2005 if (v3) { 2006 nfsm_srvwcc_data(fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft); 2007 nfsm_srvwcc_data(tdirfor_ret, &tdirfor, tdiraft_ret, &tdiraft); 2008 } 2009 return (0); 2010 2011nfsmout: 2012 if (fdirp) 2013 vrele(fdirp); 2014 if (tdirp) 2015 vrele(tdirp); 2016 if (tond.ni_cnd.cn_nameiop) { 2017 vrele(tond.ni_startdir); | 2004 nfsm_reply(2 * NFSX_WCCDATA(v3)); 2005 if (v3) { 2006 nfsm_srvwcc_data(fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft); 2007 nfsm_srvwcc_data(tdirfor_ret, &tdirfor, tdiraft_ret, &tdiraft); 2008 } 2009 return (0); 2010 2011nfsmout: 2012 if (fdirp) 2013 vrele(fdirp); 2014 if (tdirp) 2015 vrele(tdirp); 2016 if (tond.ni_cnd.cn_nameiop) { 2017 vrele(tond.ni_startdir); |
2018 FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI); | 2018 zfree(namei_zone, tond.ni_cnd.cn_pnbuf); |
2019 } 2020 if (fromnd.ni_cnd.cn_nameiop) { 2021 vrele(fromnd.ni_startdir); | 2019 } 2020 if (fromnd.ni_cnd.cn_nameiop) { 2021 vrele(fromnd.ni_startdir); |
2022 FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI); | 2022 zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf); |
2023 VOP_ABORTOP(fromnd.ni_dvp, &fromnd.ni_cnd); 2024 vrele(fromnd.ni_dvp); 2025 vrele(fvp); 2026 } 2027 return (error); 2028} 2029 2030/* --- 163 unchanged lines hidden (view full) --- 2194 nfsm_mtouio(&io, len2); 2195 if (!v3) { 2196 nfsm_dissect(sp, struct nfsv2_sattr *, NFSX_V2SATTR); 2197 vap->va_mode = fxdr_unsigned(u_short, sp->sa_mode); 2198 } 2199 *(pathcp + len2) = '\0'; 2200 if (nd.ni_vp) { 2201 vrele(nd.ni_startdir); | 2023 VOP_ABORTOP(fromnd.ni_dvp, &fromnd.ni_cnd); 2024 vrele(fromnd.ni_dvp); 2025 vrele(fvp); 2026 } 2027 return (error); 2028} 2029 2030/* --- 163 unchanged lines hidden (view full) --- 2194 nfsm_mtouio(&io, len2); 2195 if (!v3) { 2196 nfsm_dissect(sp, struct nfsv2_sattr *, NFSX_V2SATTR); 2197 vap->va_mode = fxdr_unsigned(u_short, sp->sa_mode); 2198 } 2199 *(pathcp + len2) = '\0'; 2200 if (nd.ni_vp) { 2201 vrele(nd.ni_startdir); |
2202 free(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 2202 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
2203 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 2204 if (nd.ni_dvp == nd.ni_vp) 2205 vrele(nd.ni_dvp); 2206 else 2207 vput(nd.ni_dvp); 2208 vrele(nd.ni_vp); 2209 error = EEXIST; 2210 goto out; --- 16 unchanged lines hidden (view full) --- 2227 error = VFS_VPTOFH(nd.ni_vp, &fhp->fh_fid); 2228 if (!error) 2229 error = VOP_GETATTR(nd.ni_vp, vap, cred, 2230 procp); 2231 vput(nd.ni_vp); 2232 } 2233 } else 2234 vrele(nd.ni_startdir); | 2203 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 2204 if (nd.ni_dvp == nd.ni_vp) 2205 vrele(nd.ni_dvp); 2206 else 2207 vput(nd.ni_dvp); 2208 vrele(nd.ni_vp); 2209 error = EEXIST; 2210 goto out; --- 16 unchanged lines hidden (view full) --- 2227 error = VFS_VPTOFH(nd.ni_vp, &fhp->fh_fid); 2228 if (!error) 2229 error = VOP_GETATTR(nd.ni_vp, vap, cred, 2230 procp); 2231 vput(nd.ni_vp); 2232 } 2233 } else 2234 vrele(nd.ni_startdir); |
2235 FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 2235 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
2236 } 2237out: 2238 if (pathcp) 2239 FREE(pathcp, M_TEMP); 2240 if (dirp) { 2241 diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); 2242 vrele(dirp); 2243 } --- 4 unchanged lines hidden (view full) --- 2248 nfsm_srvpostop_attr(0, vap); 2249 } 2250 nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft); 2251 } 2252 return (0); 2253nfsmout: 2254 if (nd.ni_cnd.cn_nameiop) { 2255 vrele(nd.ni_startdir); | 2236 } 2237out: 2238 if (pathcp) 2239 FREE(pathcp, M_TEMP); 2240 if (dirp) { 2241 diraft_ret = VOP_GETATTR(dirp, &diraft, cred, procp); 2242 vrele(dirp); 2243 } --- 4 unchanged lines hidden (view full) --- 2248 nfsm_srvpostop_attr(0, vap); 2249 } 2250 nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft); 2251 } 2252 return (0); 2253nfsmout: 2254 if (nd.ni_cnd.cn_nameiop) { 2255 vrele(nd.ni_startdir); |
2256 free(nd.ni_cnd.cn_pnbuf, M_NAMEI); | 2256 zfree(namei_zone, nd.ni_cnd.cn_pnbuf); |
2257 } 2258 if (dirp) 2259 vrele(dirp); 2260 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 2261 if (nd.ni_dvp == nd.ni_vp) 2262 vrele(nd.ni_dvp); 2263 else 2264 vput(nd.ni_dvp); --- 1196 unchanged lines hidden --- | 2257 } 2258 if (dirp) 2259 vrele(dirp); 2260 VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd); 2261 if (nd.ni_dvp == nd.ni_vp) 2262 vrele(nd.ni_dvp); 2263 else 2264 vput(nd.ni_dvp); --- 1196 unchanged lines hidden --- |