vfs_export.c (32585) | vfs_export.c (32702) |
---|---|
1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * (c) UNIX System Laboratories, Inc. 5 * All or some portions of this file are derived from material licensed 6 * to the University of California by American Telephone and Telegraph 7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8 * the permission of UNIX System Laboratories, Inc. --- 22 unchanged lines hidden (view full) --- 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95 | 1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * (c) UNIX System Laboratories, Inc. 5 * All or some portions of this file are derived from material licensed 6 * to the University of California by American Telephone and Telegraph 7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8 * the permission of UNIX System Laboratories, Inc. --- 22 unchanged lines hidden (view full) --- 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95 |
39 * $Id: vfs_subr.c,v 1.123 1998/01/12 03:15:01 dyson Exp $ | 39 * $Id: vfs_subr.c,v 1.124 1998/01/17 09:16:28 dyson Exp $ |
40 */ 41 42/* 43 * External virtual filesystem routines 44 */ 45#include "opt_ddb.h" 46#include "opt_devfs.h" 47 --- 15 unchanged lines hidden (view full) --- 63 64#include <vm/vm.h> 65#include <vm/vm_object.h> 66#include <vm/vm_extern.h> 67#include <vm/pmap.h> 68#include <vm/vm_map.h> 69#include <vm/vm_pager.h> 70#include <vm/vnode_pager.h> | 40 */ 41 42/* 43 * External virtual filesystem routines 44 */ 45#include "opt_ddb.h" 46#include "opt_devfs.h" 47 --- 15 unchanged lines hidden (view full) --- 63 64#include <vm/vm.h> 65#include <vm/vm_object.h> 66#include <vm/vm_extern.h> 67#include <vm/pmap.h> 68#include <vm/vm_map.h> 69#include <vm/vm_pager.h> 70#include <vm/vnode_pager.h> |
71#include <vm/vm_zone.h> |
|
71#include <sys/sysctl.h> 72 73#include <miscfs/specfs/specdev.h> 74 75static MALLOC_DEFINE(M_NETADDR, "Export Host", "Export host address structure"); 76 77static void insmntque __P((struct vnode *vp, struct mount *mp)); 78#ifdef DDB --- 36 unchanged lines hidden (view full) --- 115 116struct mntlist mountlist; /* mounted filesystem list */ 117struct simplelock mountlist_slock; 118static struct simplelock mntid_slock; 119struct simplelock mntvnode_slock; 120struct simplelock vnode_free_list_slock; 121static struct simplelock spechash_slock; 122struct nfs_public nfs_pub; /* publicly exported FS */ | 72#include <sys/sysctl.h> 73 74#include <miscfs/specfs/specdev.h> 75 76static MALLOC_DEFINE(M_NETADDR, "Export Host", "Export host address structure"); 77 78static void insmntque __P((struct vnode *vp, struct mount *mp)); 79#ifdef DDB --- 36 unchanged lines hidden (view full) --- 116 117struct mntlist mountlist; /* mounted filesystem list */ 118struct simplelock mountlist_slock; 119static struct simplelock mntid_slock; 120struct simplelock mntvnode_slock; 121struct simplelock vnode_free_list_slock; 122static struct simplelock spechash_slock; 123struct nfs_public nfs_pub; /* publicly exported FS */ |
124static vm_zone_t vnode_zone; |
|
123 124int desiredvnodes; 125SYSCTL_INT(_kern, KERN_MAXVNODES, maxvnodes, CTLFLAG_RW, &desiredvnodes, 0, ""); 126 127static void vfs_free_addrlist __P((struct netexport *nep)); 128static int vfs_free_netcred __P((struct radix_node *rn, void *w)); 129static int vfs_hang_addrlist __P((struct mount *mp, struct netexport *nep, 130 struct export_args *argp)); --- 8 unchanged lines hidden (view full) --- 139 desiredvnodes = maxproc + cnt.v_page_count / 4; 140 simple_lock_init(&mntvnode_slock); 141 simple_lock_init(&mntid_slock); 142 simple_lock_init(&spechash_slock); 143 TAILQ_INIT(&vnode_free_list); 144 TAILQ_INIT(&vnode_tobefree_list); 145 simple_lock_init(&vnode_free_list_slock); 146 CIRCLEQ_INIT(&mountlist); | 125 126int desiredvnodes; 127SYSCTL_INT(_kern, KERN_MAXVNODES, maxvnodes, CTLFLAG_RW, &desiredvnodes, 0, ""); 128 129static void vfs_free_addrlist __P((struct netexport *nep)); 130static int vfs_free_netcred __P((struct radix_node *rn, void *w)); 131static int vfs_hang_addrlist __P((struct mount *mp, struct netexport *nep, 132 struct export_args *argp)); --- 8 unchanged lines hidden (view full) --- 141 desiredvnodes = maxproc + cnt.v_page_count / 4; 142 simple_lock_init(&mntvnode_slock); 143 simple_lock_init(&mntid_slock); 144 simple_lock_init(&spechash_slock); 145 TAILQ_INIT(&vnode_free_list); 146 TAILQ_INIT(&vnode_tobefree_list); 147 simple_lock_init(&vnode_free_list_slock); 148 CIRCLEQ_INIT(&mountlist); |
149 vnode_zone = zinit("VNODE", sizeof (struct vnode), 0, 0, 5); |
|
147} 148 149/* 150 * Mark a mount point as busy. Used to synchronize access and to delay 151 * unmounting. Interlock is not released on failure. 152 */ 153int 154vfs_busy(mp, flags, interlkp, p) --- 297 unchanged lines hidden (view full) --- 452 vp->v_lastw = 0; 453 vp->v_lasta = 0; 454 vp->v_cstart = 0; 455 vp->v_clen = 0; 456 vp->v_socket = 0; 457 vp->v_writecount = 0; /* XXX */ 458 } else { 459 simple_unlock(&vnode_free_list_slock); | 150} 151 152/* 153 * Mark a mount point as busy. Used to synchronize access and to delay 154 * unmounting. Interlock is not released on failure. 155 */ 156int 157vfs_busy(mp, flags, interlkp, p) --- 297 unchanged lines hidden (view full) --- 455 vp->v_lastw = 0; 456 vp->v_lasta = 0; 457 vp->v_cstart = 0; 458 vp->v_clen = 0; 459 vp->v_socket = 0; 460 vp->v_writecount = 0; /* XXX */ 461 } else { 462 simple_unlock(&vnode_free_list_slock); |
460 vp = (struct vnode *) malloc((u_long) sizeof *vp, 461 M_VNODE, M_WAITOK); | 463 vp = (struct vnode *) zalloc(vnode_zone); |
462 bzero((char *) vp, sizeof *vp); 463 simple_lock_init(&vp->v_interlock); 464 vp->v_dd = vp; 465 cache_purge(vp); 466 LIST_INIT(&vp->v_cache_src); 467 TAILQ_INIT(&vp->v_cache_dst); 468 numvnodes++; 469 } --- 442 unchanged lines hidden (view full) --- 912 /* 913 * Create the VM object, if needed 914 */ 915 if ((flags & LK_NOOBJ) == 0 && 916 (vp->v_type == VREG) && 917 ((vp->v_object == NULL) || 918 (vp->v_object->flags & OBJ_DEAD))) { 919 vfs_object_create(vp, curproc, curproc->p_ucred, 0); | 464 bzero((char *) vp, sizeof *vp); 465 simple_lock_init(&vp->v_interlock); 466 vp->v_dd = vp; 467 cache_purge(vp); 468 LIST_INIT(&vp->v_cache_src); 469 TAILQ_INIT(&vp->v_cache_dst); 470 numvnodes++; 471 } --- 442 unchanged lines hidden (view full) --- 914 /* 915 * Create the VM object, if needed 916 */ 917 if ((flags & LK_NOOBJ) == 0 && 918 (vp->v_type == VREG) && 919 ((vp->v_object == NULL) || 920 (vp->v_object->flags & OBJ_DEAD))) { 921 vfs_object_create(vp, curproc, curproc->p_ucred, 0); |
922 simple_lock(&vp->v_interlock); |
|
920 } 921 if (flags & LK_TYPE_MASK) { 922 if (error = vn_lock(vp, flags | LK_INTERLOCK, p)) 923 vrele(vp); 924 return (error); 925 } 926 simple_unlock(&vp->v_interlock); 927 return (0); --- 457 unchanged lines hidden (view full) --- 1385 tsleep((caddr_t)vp, PINOD, "vgone", 0); 1386 return; 1387 } 1388 1389 /* 1390 * Clean out the filesystem specific data. 1391 */ 1392 vclean(vp, DOCLOSE, p); | 923 } 924 if (flags & LK_TYPE_MASK) { 925 if (error = vn_lock(vp, flags | LK_INTERLOCK, p)) 926 vrele(vp); 927 return (error); 928 } 929 simple_unlock(&vp->v_interlock); 930 return (0); --- 457 unchanged lines hidden (view full) --- 1388 tsleep((caddr_t)vp, PINOD, "vgone", 0); 1389 return; 1390 } 1391 1392 /* 1393 * Clean out the filesystem specific data. 1394 */ 1395 vclean(vp, DOCLOSE, p); |
1396 simple_lock(&vp->v_interlock); |
|
1393 1394 /* 1395 * Delete from old mount point vnode list, if on one. 1396 */ 1397 if (vp->v_mount != NULL) 1398 insmntque(vp, (struct mount *)0); 1399 /* 1400 * If special device, remove it from special device alias list --- 901 unchanged lines hidden --- | 1397 1398 /* 1399 * Delete from old mount point vnode list, if on one. 1400 */ 1401 if (vp->v_mount != NULL) 1402 insmntque(vp, (struct mount *)0); 1403 /* 1404 * If special device, remove it from special device alias list --- 901 unchanged lines hidden --- |