Deleted Added
full compact
nfs_srvsubs.c (17186) nfs_srvsubs.c (17761)
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_subs.c 8.3 (Berkeley) 1/4/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_subs.c 8.3 (Berkeley) 1/4/94
37 * $Id: nfs_subs.c,v 1.30 1996/06/23 17:19:25 bde Exp $
37 * $Id: nfs_subs.c,v 1.31 1996/07/16 10:19:44 dfr Exp $
38 */
39
40/*
41 * These functions support the macros and help fiddle mbuf chains for
42 * the nfs op functions. They do things like create the rpc header and
43 * copy data between mbuf chains and uio lists.
44 */
45#include <sys/param.h>

--- 1435 unchanged lines hidden (view full) ---

1481 cnp->cn_nameptr = cnp->cn_pnbuf;
1482 /*
1483 * Extract and set starting directory.
1484 */
1485 if (error = nfsrv_fhtovp(fhp, FALSE, &dp, ndp->ni_cnd.cn_cred, slp,
1486 nam, &rdonly, kerbflag))
1487 goto out;
1488 if (dp->v_type != VDIR) {
38 */
39
40/*
41 * These functions support the macros and help fiddle mbuf chains for
42 * the nfs op functions. They do things like create the rpc header and
43 * copy data between mbuf chains and uio lists.
44 */
45#include <sys/param.h>

--- 1435 unchanged lines hidden (view full) ---

1481 cnp->cn_nameptr = cnp->cn_pnbuf;
1482 /*
1483 * Extract and set starting directory.
1484 */
1485 if (error = nfsrv_fhtovp(fhp, FALSE, &dp, ndp->ni_cnd.cn_cred, slp,
1486 nam, &rdonly, kerbflag))
1487 goto out;
1488 if (dp->v_type != VDIR) {
1489 nfsrv_vrele(dp);
1489 vrele(dp);
1490 error = ENOTDIR;
1491 goto out;
1492 }
1493 VREF(dp);
1494 *retdirp = dp;
1495 ndp->ni_startdir = dp;
1496 if (rdonly)
1497 cnp->cn_flags |= (NOCROSSMOUNT | RDONLY);

--- 14 unchanged lines hidden (view full) ---

1512 else
1513 vrele(ndp->ni_dvp);
1514 vput(ndp->ni_vp);
1515 ndp->ni_vp = NULL;
1516 error = EINVAL;
1517 goto out;
1518 }
1519
1490 error = ENOTDIR;
1491 goto out;
1492 }
1493 VREF(dp);
1494 *retdirp = dp;
1495 ndp->ni_startdir = dp;
1496 if (rdonly)
1497 cnp->cn_flags |= (NOCROSSMOUNT | RDONLY);

--- 14 unchanged lines hidden (view full) ---

1512 else
1513 vrele(ndp->ni_dvp);
1514 vput(ndp->ni_vp);
1515 ndp->ni_vp = NULL;
1516 error = EINVAL;
1517 goto out;
1518 }
1519
1520 nfsrv_vmio(ndp->ni_vp);
1520 nfsrv_object_create(ndp->ni_vp);
1521
1522 /*
1523 * Check for saved name request
1524 */
1525 if (cnp->cn_flags & (SAVENAME | SAVESTART)) {
1526 cnp->cn_flags |= HASBUF;
1527 return (0);
1528 }

--- 214 unchanged lines hidden (view full) ---

1743 cred->cr_groups[i] = credanon->cr_groups[i];
1744 cred->cr_ngroups = i;
1745 }
1746 if (exflags & MNT_EXRDONLY)
1747 *rdonlyp = 1;
1748 else
1749 *rdonlyp = 0;
1750
1521
1522 /*
1523 * Check for saved name request
1524 */
1525 if (cnp->cn_flags & (SAVENAME | SAVESTART)) {
1526 cnp->cn_flags |= HASBUF;
1527 return (0);
1528 }

--- 214 unchanged lines hidden (view full) ---

1743 cred->cr_groups[i] = credanon->cr_groups[i];
1744 cred->cr_ngroups = i;
1745 }
1746 if (exflags & MNT_EXRDONLY)
1747 *rdonlyp = 1;
1748 else
1749 *rdonlyp = 0;
1750
1751 nfsrv_vmio(*vpp);
1751 nfsrv_object_create(*vpp);
1752
1753 if (!lockflag)
1754 VOP_UNLOCK(*vpp);
1755 return (0);
1756}
1757
1758#endif /* NFS_NOSERVER */
1759/*

--- 175 unchanged lines hidden (view full) ---

1935 return (err & 0xffff);
1936 }
1937 if (err <= ELAST)
1938 return ((int)nfsrv_v2errmap[err - 1]);
1939 return (NFSERR_IO);
1940}
1941
1942int
1752
1753 if (!lockflag)
1754 VOP_UNLOCK(*vpp);
1755 return (0);
1756}
1757
1758#endif /* NFS_NOSERVER */
1759/*

--- 175 unchanged lines hidden (view full) ---

1935 return (err & 0xffff);
1936 }
1937 if (err <= ELAST)
1938 return ((int)nfsrv_v2errmap[err - 1]);
1939 return (NFSERR_IO);
1940}
1941
1942int
1943nfsrv_vmio(struct vnode *vp) {
1944 vm_object_t object;
1943nfsrv_object_create(struct vnode *vp) {
1945
1946 if ((vp == NULL) || (vp->v_type != VREG))
1947 return 1;
1944
1945 if ((vp == NULL) || (vp->v_type != VREG))
1946 return 1;
1948
1949retry:
1950 if ((vp->v_flag & VVMIO) == 0) {
1951 struct vattr vat;
1952 struct proc *p = curproc;
1953
1954 if (VOP_GETATTR(vp, &vat, p->p_ucred, p) != 0)
1955 panic("nfsrv_vmio: VOP_GETATTR failed");
1956
1957 (void) vnode_pager_alloc(vp, OFF_TO_IDX(round_page(vat.va_size)), 0, 0);
1958
1959 vp->v_flag |= VVMIO;
1960 } else {
1961 if ((object = vp->v_object) &&
1962 (object->flags & OBJ_DEAD)) {
1963 tsleep(object, PVM, "nfdead", 0);
1964 goto retry;
1965 }
1966 if (!object)
1967 panic("nfsrv_vmio: VMIO object missing");
1968 vm_object_reference(object);
1969 }
1970 return 0;
1947 return vfs_object_create(vp, curproc, curproc?curproc->p_ucred:NULL, 1);
1971}
1948}
1972int
1973nfsrv_vput(struct vnode *vp) {
1974 if ((vp->v_flag & VVMIO) && vp->v_object) {
1975 vput(vp);
1976 vm_object_deallocate(vp->v_object);
1977 } else {
1978 vput(vp);
1979 }
1980 return 0;
1981}
1982int
1983nfsrv_vrele(struct vnode *vp) {
1984 if ((vp->v_flag & VVMIO) && vp->v_object) {
1985 vrele(vp);
1986 vm_object_deallocate(vp->v_object);
1987 } else {
1988 vrele(vp);
1989 }
1990 return 0;
1991}
1992#endif /* NFS_NOSERVER */
1949#endif /* NFS_NOSERVER */