nfs_subs.c (17186) | nfs_subs.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 */ |