Deleted Added
full compact
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 ---