summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/cd9660/cd9660_vnops.c10
-rw-r--r--sys/fs/msdosfs/msdosfs_vnops.c20
-rw-r--r--sys/fs/procfs/procfs_vnops.c4
-rw-r--r--sys/fs/unionfs/union_subr.c8
-rw-r--r--sys/i386/ibcs2/imgact_coff.c6
-rw-r--r--sys/isofs/cd9660/cd9660_vnops.c10
-rw-r--r--sys/kern/kern_exec.c8
-rw-r--r--sys/kern/kern_lock.c162
-rw-r--r--sys/kern/vfs_extattr.c11
-rw-r--r--sys/kern/vfs_init.c10
-rw-r--r--sys/kern/vfs_lookup.c20
-rw-r--r--sys/kern/vfs_syscalls.c11
-rw-r--r--sys/miscfs/devfs/devfs_vnops.c4
-rw-r--r--sys/miscfs/procfs/procfs_vnops.c4
-rw-r--r--sys/miscfs/union/union_subr.c8
-rw-r--r--sys/msdosfs/msdosfs_vnops.c20
-rw-r--r--sys/nfs/nfs_common.c21
-rw-r--r--sys/nfs/nfs_node.c4
-rw-r--r--sys/nfs/nfs_serv.c44
-rw-r--r--sys/nfs/nfs_subs.c21
-rw-r--r--sys/nfs/nfs_vnops.c16
-rw-r--r--sys/nfsclient/nfs_node.c4
-rw-r--r--sys/nfsclient/nfs_subs.c21
-rw-r--r--sys/nfsclient/nfs_vnops.c16
-rw-r--r--sys/nfsserver/nfs_serv.c44
-rw-r--r--sys/nfsserver/nfs_srvsubs.c21
-rw-r--r--sys/sys/lock.h5
-rw-r--r--sys/sys/lockmgr.h5
-rw-r--r--sys/sys/malloc.h8
-rw-r--r--sys/sys/vnode.h5
-rw-r--r--sys/ufs/ufs/ufs_vnops.c20
-rw-r--r--sys/vm/vm_map.c13
-rw-r--r--sys/vm/vm_object.c32
-rw-r--r--sys/vm/vm_object.h3
-rw-r--r--sys/vm/vm_zone.c70
-rw-r--r--sys/vm/vm_zone.h33
36 files changed, 427 insertions, 295 deletions
diff --git a/sys/fs/cd9660/cd9660_vnops.c b/sys/fs/cd9660/cd9660_vnops.c
index 58d5218..e518e89 100644
--- a/sys/fs/cd9660/cd9660_vnops.c
+++ b/sys/fs/cd9660/cd9660_vnops.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)cd9660_vnops.c 8.19 (Berkeley) 5/27/95
- * $Id: cd9660_vnops.c,v 1.37 1997/08/26 07:32:32 phk Exp $
+ * $Id: cd9660_vnops.c,v 1.38 1997/09/14 02:57:43 peter Exp $
*/
#include <sys/param.h>
@@ -782,14 +782,14 @@ cd9660_readlink(ap)
if (uio->uio_segflg == UIO_SYSSPACE)
symname = uio->uio_iov->iov_base;
else
- MALLOC(symname, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ symname = zalloc(namei_zone);
/*
* Ok, we just gathering a symbolic name in SL record.
*/
if (cd9660_rrip_getsymname(dirp, symname, &symlen, imp) == 0) {
if (uio->uio_segflg != UIO_SYSSPACE)
- FREE(symname, M_NAMEI);
+ zfree(namei_zone, symname);
brelse(bp);
return (EINVAL);
}
@@ -803,7 +803,7 @@ cd9660_readlink(ap)
*/
if (uio->uio_segflg != UIO_SYSSPACE) {
error = uiomove(symname, symlen, uio);
- FREE(symname, M_NAMEI);
+ zfree(namei_zone, symname);
return (error);
}
uio->uio_resid -= symlen;
@@ -824,7 +824,7 @@ cd9660_abortop(ap)
} */ *ap;
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
diff --git a/sys/fs/msdosfs/msdosfs_vnops.c b/sys/fs/msdosfs/msdosfs_vnops.c
index f4ce26a..8d9bfc5 100644
--- a/sys/fs/msdosfs/msdosfs_vnops.c
+++ b/sys/fs/msdosfs/msdosfs_vnops.c
@@ -1,4 +1,4 @@
-/* $Id: msdosfs_vnops.c,v 1.43 1997/08/26 07:32:39 phk Exp $ */
+/* $Id: msdosfs_vnops.c,v 1.44 1997/09/14 02:57:44 peter Exp $ */
/* $NetBSD: msdosfs_vnops.c,v 1.20 1994/08/21 18:44:13 ws Exp $ */
/*-
@@ -177,9 +177,9 @@ msdosfs_create(ap)
if ((error = createde(&ndirent, pdep, &dep)) == 0) {
*ap->a_vpp = DETOV(dep);
if ((cnp->cn_flags & SAVESTART) == 0)
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
} else {
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
}
vput(ap->a_dvp); /* release parent dir */
return error;
@@ -207,7 +207,7 @@ msdosfs_mknod(ap)
default:
error = EINVAL;
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
break;
}
@@ -1336,7 +1336,7 @@ msdosfs_mkdir(ap)
* change size.
*/
if (pdep->de_StartCluster == MSDOSFSROOT && pdep->de_fndclust == (u_long)-1) {
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return ENOSPC;
}
@@ -1348,7 +1348,7 @@ msdosfs_mkdir(ap)
*/
error = clusteralloc(pmp, 0, 1, CLUST_EOFE, &newcluster, NULL);
if (error) {
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return error;
}
@@ -1376,7 +1376,7 @@ msdosfs_mkdir(ap)
error = bwrite(bp);
if (error) {
clusterfree(pmp, newcluster, NULL);
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return error;
}
@@ -1401,7 +1401,7 @@ msdosfs_mkdir(ap)
} else {
*ap->a_vpp = DETOV(ndep);
}
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
#ifdef MSDOSFS_DEBUG
printf("msdosfs_mkdir(): vput(%08x)\n", ap->a_dvp);
#endif
@@ -1479,7 +1479,7 @@ msdosfs_symlink(ap)
char *a_target;
} */ *ap;
{
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return EINVAL;
}
@@ -1794,7 +1794,7 @@ msdosfs_abortop(ap)
} */ *ap;
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return 0;
}
diff --git a/sys/fs/procfs/procfs_vnops.c b/sys/fs/procfs/procfs_vnops.c
index d34fb2d..7912c95 100644
--- a/sys/fs/procfs/procfs_vnops.c
+++ b/sys/fs/procfs/procfs_vnops.c
@@ -36,7 +36,7 @@
*
* @(#)procfs_vnops.c 8.18 (Berkeley) 5/21/95
*
- * $Id: procfs_vnops.c,v 1.31 1997/08/12 04:34:30 sef Exp $
+ * $Id: procfs_vnops.c,v 1.32 1997/09/14 02:57:58 peter Exp $
*/
/*
@@ -351,7 +351,7 @@ procfs_abortop(ap)
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
diff --git a/sys/fs/unionfs/union_subr.c b/sys/fs/unionfs/union_subr.c
index 7f85e65..faf9ec9 100644
--- a/sys/fs/unionfs/union_subr.c
+++ b/sys/fs/unionfs/union_subr.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)union_subr.c 8.20 (Berkeley) 5/20/95
- * $Id: union_subr.c,v 1.19 1997/08/02 14:32:28 bde Exp $
+ * $Id: union_subr.c,v 1.20 1997/08/14 03:57:46 kato Exp $
*/
#include <sys/param.h>
@@ -740,7 +740,7 @@ union_relookup(um, dvp, vpp, cnp, cn, path, pathlen)
* The pathname buffer will be FREEed by VOP_MKDIR.
*/
cn->cn_namelen = pathlen;
- cn->cn_pnbuf = malloc(cn->cn_namelen+1, M_NAMEI, M_WAITOK);
+ cn->cn_pnbuf = zalloc(namei_zone);
bcopy(path, cn->cn_pnbuf, cn->cn_namelen);
cn->cn_pnbuf[cn->cn_namelen] = '\0';
@@ -760,7 +760,7 @@ union_relookup(um, dvp, vpp, cnp, cn, path, pathlen)
if (!error)
vrele(dvp);
else {
- free(cn->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cn->cn_pnbuf);
cn->cn_pnbuf = '\0';
}
@@ -906,7 +906,7 @@ union_vn_create(vpp, un, p)
* copied in the first place).
*/
cn.cn_namelen = strlen(un->un_path);
- cn.cn_pnbuf = (caddr_t) malloc(cn.cn_namelen+1, M_NAMEI, M_WAITOK);
+ cn.cn_pnbuf = zalloc(namei_zone);
bcopy(un->un_path, cn.cn_pnbuf, cn.cn_namelen+1);
cn.cn_nameiop = CREATE;
cn.cn_flags = (LOCKPARENT|HASBUF|SAVENAME|SAVESTART|ISLASTCN);
diff --git a/sys/i386/ibcs2/imgact_coff.c b/sys/i386/ibcs2/imgact_coff.c
index 187fc43..376ac91 100644
--- a/sys/i386/ibcs2/imgact_coff.c
+++ b/sys/i386/ibcs2/imgact_coff.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: imgact_coff.c,v 1.25 1997/07/20 09:39:51 bde Exp $
+ * $Id: imgact_coff.c,v 1.26 1997/08/25 22:14:57 bde Exp $
*/
#include <sys/param.h>
@@ -277,8 +277,8 @@ coff_load_file(struct proc *p, char *name)
panic(__FUNCTION__ " vm_map_remove failed");
fail:
- vput(nd.ni_vp);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ vput(nd.ni_vp);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
return error;
}
diff --git a/sys/isofs/cd9660/cd9660_vnops.c b/sys/isofs/cd9660/cd9660_vnops.c
index 58d5218..e518e89 100644
--- a/sys/isofs/cd9660/cd9660_vnops.c
+++ b/sys/isofs/cd9660/cd9660_vnops.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)cd9660_vnops.c 8.19 (Berkeley) 5/27/95
- * $Id: cd9660_vnops.c,v 1.37 1997/08/26 07:32:32 phk Exp $
+ * $Id: cd9660_vnops.c,v 1.38 1997/09/14 02:57:43 peter Exp $
*/
#include <sys/param.h>
@@ -782,14 +782,14 @@ cd9660_readlink(ap)
if (uio->uio_segflg == UIO_SYSSPACE)
symname = uio->uio_iov->iov_base;
else
- MALLOC(symname, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ symname = zalloc(namei_zone);
/*
* Ok, we just gathering a symbolic name in SL record.
*/
if (cd9660_rrip_getsymname(dirp, symname, &symlen, imp) == 0) {
if (uio->uio_segflg != UIO_SYSSPACE)
- FREE(symname, M_NAMEI);
+ zfree(namei_zone, symname);
brelse(bp);
return (EINVAL);
}
@@ -803,7 +803,7 @@ cd9660_readlink(ap)
*/
if (uio->uio_segflg != UIO_SYSSPACE) {
error = uiomove(symname, symlen, uio);
- FREE(symname, M_NAMEI);
+ zfree(namei_zone, symname);
return (error);
}
uio->uio_resid -= symlen;
@@ -824,7 +824,7 @@ cd9660_abortop(ap)
} */ *ap;
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c
index d1fbf72..29a53d1 100644
--- a/sys/kern/kern_exec.c
+++ b/sys/kern/kern_exec.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: kern_exec.c,v 1.64 1997/08/04 05:39:24 davidg Exp $
+ * $Id: kern_exec.c,v 1.65 1997/09/02 20:05:38 bde Exp $
*/
#include <sys/param.h>
@@ -224,7 +224,7 @@ interpret:
}
/* free old vnode and name buffer */
vrele(ndp->ni_vp);
- FREE(ndp->ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ndp->ni_cnd.cn_pnbuf);
/* set new name to that of the interpreter */
NDINIT(ndp, LOOKUP, LOCKLEAF | FOLLOW | SAVENAME,
UIO_SYSSPACE, imgp->interpreter_name, p);
@@ -356,7 +356,7 @@ interpret:
else if (imgp->image_header != NULL)
free((void *)imgp->image_header, M_TEMP);
vrele(ndp->ni_vp);
- FREE(ndp->ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ndp->ni_cnd.cn_pnbuf);
return (0);
@@ -369,7 +369,7 @@ exec_fail_dealloc:
free((void *)imgp->image_header, M_TEMP);
if (ndp->ni_vp) {
vrele(ndp->ni_vp);
- FREE(ndp->ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ndp->ni_cnd.cn_pnbuf);
}
exec_fail:
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c
index d119c57..ff1b252 100644
--- a/sys/kern/kern_lock.c
+++ b/sys/kern/kern_lock.c
@@ -38,7 +38,7 @@
* SUCH DAMAGE.
*
* @(#)kern_lock.c 8.18 (Berkeley) 5/21/95
- * $Id: kern_lock.c,v 1.10 1997/08/19 00:27:07 dyson Exp $
+ * $Id: kern_lock.c,v 1.11 1997/08/22 07:16:46 phk Exp $
*/
#include <sys/param.h>
@@ -70,7 +70,12 @@
#define LOCK_INLINE inline
#endif
+#define LK_ALL (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE | \
+ LK_SHARE_NONZERO | LK_WAIT_NONZERO)
+
static int acquire(struct lock *lkp, int extflags, int wanted);
+static int apause(struct lock *lkp, int flags);
+static int acquiredrain(struct lock *lkp, int extflags) ;
static LOCK_INLINE void
sharelock(struct lock *lkp, int incr) {
@@ -94,6 +99,11 @@ shareunlock(struct lock *lkp, int decr) {
lkp->lk_flags &= ~LK_SHARE_NONZERO;
}
+/*
+ * This is the waitloop optimization, and note for this to work
+ * simple_lock and simple_unlock should be subroutines to avoid
+ * optimization troubles.
+ */
static int
apause(struct lock *lkp, int flags) {
int lock_wait;
@@ -115,7 +125,6 @@ apause(struct lock *lkp, int flags) {
return 1;
}
-
static int
acquire(struct lock *lkp, int extflags, int wanted) {
int error;
@@ -125,9 +134,11 @@ acquire(struct lock *lkp, int extflags, int wanted) {
return EBUSY;
}
- error = apause(lkp, wanted);
- if (error == 0)
- return 0;
+ if (((lkp->lk_flags | extflags) & LK_NOPAUSE) == 0) {
+ error = apause(lkp, wanted);
+ if (error == 0)
+ return 0;
+ }
while ((lkp->lk_flags & wanted) != 0) {
lkp->lk_flags |= LK_WAIT_NONZERO;
@@ -147,78 +158,6 @@ acquire(struct lock *lkp, int extflags, int wanted) {
return 0;
}
-#define LK_ALL (LK_HAVE_EXCL | LK_WANT_EXCL | LK_WANT_UPGRADE | \
- LK_SHARE_NONZERO | LK_WAIT_NONZERO)
-
-static int
-acquiredrain(struct lock *lkp, int extflags) {
- int error;
- int lock_wait;
-
- if ((extflags & LK_NOWAIT) && (lkp->lk_flags & LK_ALL)) {
- return EBUSY;
- }
-
- error = apause(lkp, LK_ALL);
- if (error == 0)
- return 0;
-
- while (lkp->lk_flags & LK_ALL) {
- lkp->lk_flags |= LK_WAITDRAIN;
- simple_unlock(&lkp->lk_interlock);
- error = tsleep(&lkp->lk_flags, lkp->lk_prio,
- lkp->lk_wmesg, lkp->lk_timo);
- simple_lock(&lkp->lk_interlock);
- if (error)
- return error;
- if (extflags & LK_SLEEPFAIL) {
- return ENOLCK;
- }
- }
- return 0;
-}
-
-/*
- * Initialize a lock; required before use.
- */
-void
-lockinit(lkp, prio, wmesg, timo, flags)
- struct lock *lkp;
- int prio;
- char *wmesg;
- int timo;
- int flags;
-{
-
- simple_lock_init(&lkp->lk_interlock);
- lkp->lk_flags = (flags & LK_EXTFLG_MASK);
- lkp->lk_sharecount = 0;
- lkp->lk_waitcount = 0;
- lkp->lk_exclusivecount = 0;
- lkp->lk_prio = prio;
- lkp->lk_wmesg = wmesg;
- lkp->lk_timo = timo;
- lkp->lk_lockholder = LK_NOPROC;
-}
-
-/*
- * Determine the status of a lock.
- */
-int
-lockstatus(lkp)
- struct lock *lkp;
-{
- int lock_type = 0;
-
- simple_lock(&lkp->lk_interlock);
- if (lkp->lk_exclusivecount != 0)
- lock_type = LK_EXCLUSIVE;
- else if (lkp->lk_sharecount != 0)
- lock_type = LK_SHARED;
- simple_unlock(&lkp->lk_interlock);
- return (lock_type);
-}
-
/*
* Set, change, or release a lock.
*
@@ -441,6 +380,75 @@ lockmgr(lkp, flags, interlkp, p)
return (error);
}
+static int
+acquiredrain(struct lock *lkp, int extflags) {
+ int error;
+ int lock_wait;
+
+ if ((extflags & LK_NOWAIT) && (lkp->lk_flags & LK_ALL)) {
+ return EBUSY;
+ }
+
+ error = apause(lkp, LK_ALL);
+ if (error == 0)
+ return 0;
+
+ while (lkp->lk_flags & LK_ALL) {
+ lkp->lk_flags |= LK_WAITDRAIN;
+ simple_unlock(&lkp->lk_interlock);
+ error = tsleep(&lkp->lk_flags, lkp->lk_prio,
+ lkp->lk_wmesg, lkp->lk_timo);
+ simple_lock(&lkp->lk_interlock);
+ if (error)
+ return error;
+ if (extflags & LK_SLEEPFAIL) {
+ return ENOLCK;
+ }
+ }
+ return 0;
+}
+
+/*
+ * Initialize a lock; required before use.
+ */
+void
+lockinit(lkp, prio, wmesg, timo, flags)
+ struct lock *lkp;
+ int prio;
+ char *wmesg;
+ int timo;
+ int flags;
+{
+
+ simple_lock_init(&lkp->lk_interlock);
+ lkp->lk_flags = (flags & LK_EXTFLG_MASK);
+ lkp->lk_sharecount = 0;
+ lkp->lk_waitcount = 0;
+ lkp->lk_exclusivecount = 0;
+ lkp->lk_prio = prio;
+ lkp->lk_wmesg = wmesg;
+ lkp->lk_timo = timo;
+ lkp->lk_lockholder = LK_NOPROC;
+}
+
+/*
+ * Determine the status of a lock.
+ */
+int
+lockstatus(lkp)
+ struct lock *lkp;
+{
+ int lock_type = 0;
+
+ simple_lock(&lkp->lk_interlock);
+ if (lkp->lk_exclusivecount != 0)
+ lock_type = LK_EXCLUSIVE;
+ else if (lkp->lk_sharecount != 0)
+ lock_type = LK_SHARED;
+ simple_unlock(&lkp->lk_interlock);
+ return (lock_type);
+}
+
/*
* Print out information about state of a lock. Used by VOP_PRINT
* routines to display status about contained locks.
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index b45568b..030136b 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
- * $Id: vfs_syscalls.c,v 1.70 1997/09/15 19:11:07 phk Exp $
+ * $Id: vfs_syscalls.c,v 1.71 1997/09/16 08:05:09 phk Exp $
*/
/*
@@ -1157,7 +1157,7 @@ symlink(p, uap, retval)
int error;
struct nameidata nd;
- MALLOC(path, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ path = zalloc(namei_zone);
if (error = copyinstr(SCARG(uap, path), path, MAXPATHLEN, NULL))
goto out;
NDINIT(&nd, CREATE, LOCKPARENT, UIO_USERSPACE, SCARG(uap, link), p);
@@ -1180,7 +1180,7 @@ symlink(p, uap, retval)
ASSERT_VOP_UNLOCKED(nd.ni_dvp, "symlink");
ASSERT_VOP_UNLOCKED(nd.ni_vp, "symlink");
out:
- FREE(path, M_NAMEI);
+ zfree(namei_zone, path);
return (error);
}
@@ -2288,11 +2288,11 @@ out:
ASSERT_VOP_UNLOCKED(fromnd.ni_vp, "rename");
ASSERT_VOP_UNLOCKED(tond.ni_dvp, "rename");
ASSERT_VOP_UNLOCKED(tond.ni_vp, "rename");
- FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, tond.ni_cnd.cn_pnbuf);
out1:
if (fromnd.ni_startdir)
vrele(fromnd.ni_startdir);
- FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf);
if (error == -1)
return (0);
return (error);
@@ -2616,6 +2616,7 @@ unionread:
auio.uio_segflg = UIO_USERSPACE;
auio.uio_procp = p;
auio.uio_resid = SCARG(uap, count);
+ /* vn_lock(vp, LK_SHARED | LK_RETRY, p); */
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
loff = auio.uio_offset = fp->f_offset;
error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, NULL, NULL);
diff --git a/sys/kern/vfs_init.c b/sys/kern/vfs_init.c
index b52b08b..6bf5f6d 100644
--- a/sys/kern/vfs_init.c
+++ b/sys/kern/vfs_init.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_init.c 8.3 (Berkeley) 1/4/94
- * $Id: vfs_init.c,v 1.26 1997/08/02 14:31:44 bde Exp $
+ * $Id: vfs_init.c,v 1.27 1997/09/10 20:11:01 phk Exp $
*/
@@ -46,6 +46,7 @@
#include <sys/mount.h>
#include <sys/vnode.h>
#include <sys/malloc.h>
+#include <vm/vm_zone.h>
static void vfs_op_init __P((void));
@@ -72,6 +73,11 @@ extern struct vnodeop_desc *vfs_op_descs[];
/* and the operations they perform */
/*
+ * Zone for namei
+ */
+struct vm_zone *namei_zone;
+
+/*
* A miscellaneous routine.
* A generic "default" routine that just returns an error.
*/
@@ -234,6 +240,8 @@ vfsinit(dummy)
struct vfsconf **vfc;
int maxtypenum;
+ namei_zone = zinit("NAMEI", MAXPATHLEN, 0, 0, 2);
+
/*
* Initialize the vnode table
*/
diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index 97a29d6..607d168 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_lookup.c 8.4 (Berkeley) 2/16/94
- * $Id: vfs_lookup.c,v 1.18 1997/04/04 17:47:43 dfr Exp $
+ * $Id: vfs_lookup.c,v 1.19 1997/09/02 20:06:01 bde Exp $
*/
#include "opt_ktrace.h"
@@ -103,7 +103,7 @@ namei(ndp)
* name into the buffer.
*/
if ((cnp->cn_flags & HASBUF) == 0)
- MALLOC(cnp->cn_pnbuf, caddr_t, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cnp->cn_pnbuf = zalloc(namei_zone);
if (ndp->ni_segflg == UIO_SYSSPACE)
error = copystr(ndp->ni_dirp, cnp->cn_pnbuf,
MAXPATHLEN, (u_int *)&ndp->ni_pathlen);
@@ -118,7 +118,7 @@ namei(ndp)
error = ENOENT;
if (error) {
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
ndp->ni_vp = NULL;
return (error);
}
@@ -153,7 +153,7 @@ namei(ndp)
ndp->ni_startdir = dp;
error = lookup(ndp);
if (error) {
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
return (error);
}
/*
@@ -161,7 +161,7 @@ namei(ndp)
*/
if ((cnp->cn_flags & ISSYMLINK) == 0) {
if ((cnp->cn_flags & (SAVENAME | SAVESTART)) == 0)
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
else
cnp->cn_flags |= HASBUF;
return (0);
@@ -173,7 +173,7 @@ namei(ndp)
break;
}
if (ndp->ni_pathlen > 1)
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
else
cp = cnp->cn_pnbuf;
aiov.iov_base = cp;
@@ -188,19 +188,19 @@ namei(ndp)
error = VOP_READLINK(ndp->ni_vp, &auio, cnp->cn_cred);
if (error) {
if (ndp->ni_pathlen > 1)
- free(cp, M_NAMEI);
+ zfree(namei_zone, cp);
break;
}
linklen = MAXPATHLEN - auio.uio_resid;
if (linklen + ndp->ni_pathlen >= MAXPATHLEN) {
if (ndp->ni_pathlen > 1)
- free(cp, M_NAMEI);
+ zfree(namei_zone, cp);
error = ENAMETOOLONG;
break;
}
if (ndp->ni_pathlen > 1) {
bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
} else
cnp->cn_pnbuf[linklen] = '\0';
@@ -208,7 +208,7 @@ namei(ndp)
vput(ndp->ni_vp);
dp = ndp->ni_dvp;
}
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vrele(ndp->ni_dvp);
vput(ndp->ni_vp);
ndp->ni_vp = NULL;
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index b45568b..030136b 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
- * $Id: vfs_syscalls.c,v 1.70 1997/09/15 19:11:07 phk Exp $
+ * $Id: vfs_syscalls.c,v 1.71 1997/09/16 08:05:09 phk Exp $
*/
/*
@@ -1157,7 +1157,7 @@ symlink(p, uap, retval)
int error;
struct nameidata nd;
- MALLOC(path, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ path = zalloc(namei_zone);
if (error = copyinstr(SCARG(uap, path), path, MAXPATHLEN, NULL))
goto out;
NDINIT(&nd, CREATE, LOCKPARENT, UIO_USERSPACE, SCARG(uap, link), p);
@@ -1180,7 +1180,7 @@ symlink(p, uap, retval)
ASSERT_VOP_UNLOCKED(nd.ni_dvp, "symlink");
ASSERT_VOP_UNLOCKED(nd.ni_vp, "symlink");
out:
- FREE(path, M_NAMEI);
+ zfree(namei_zone, path);
return (error);
}
@@ -2288,11 +2288,11 @@ out:
ASSERT_VOP_UNLOCKED(fromnd.ni_vp, "rename");
ASSERT_VOP_UNLOCKED(tond.ni_dvp, "rename");
ASSERT_VOP_UNLOCKED(tond.ni_vp, "rename");
- FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, tond.ni_cnd.cn_pnbuf);
out1:
if (fromnd.ni_startdir)
vrele(fromnd.ni_startdir);
- FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf);
if (error == -1)
return (0);
return (error);
@@ -2616,6 +2616,7 @@ unionread:
auio.uio_segflg = UIO_USERSPACE;
auio.uio_procp = p;
auio.uio_resid = SCARG(uap, count);
+ /* vn_lock(vp, LK_SHARED | LK_RETRY, p); */
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
loff = auio.uio_offset = fp->f_offset;
error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, NULL, NULL);
diff --git a/sys/miscfs/devfs/devfs_vnops.c b/sys/miscfs/devfs/devfs_vnops.c
index f735ba8..35b62af 100644
--- a/sys/miscfs/devfs/devfs_vnops.c
+++ b/sys/miscfs/devfs/devfs_vnops.c
@@ -1,7 +1,7 @@
/*
* Written by Julian Elischer (julian@DIALix.oz.au)
*
- * $Header: /home/ncvs/src/sys/miscfs/devfs/devfs_vnops.c,v 1.38 1997/08/27 02:58:40 julian Exp $
+ * $Header: /home/ncvs/src/sys/miscfs/devfs/devfs_vnops.c,v 1.39 1997/09/14 02:57:48 peter Exp $
*
* symlinks can wait 'til later.
*/
@@ -1432,7 +1432,7 @@ devfs_abortop(struct vop_abortop_args *ap)
{
DBPRINT(("abortop\n"));
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return 0;
}
#endif /* notyet */
diff --git a/sys/miscfs/procfs/procfs_vnops.c b/sys/miscfs/procfs/procfs_vnops.c
index d34fb2d..7912c95 100644
--- a/sys/miscfs/procfs/procfs_vnops.c
+++ b/sys/miscfs/procfs/procfs_vnops.c
@@ -36,7 +36,7 @@
*
* @(#)procfs_vnops.c 8.18 (Berkeley) 5/21/95
*
- * $Id: procfs_vnops.c,v 1.31 1997/08/12 04:34:30 sef Exp $
+ * $Id: procfs_vnops.c,v 1.32 1997/09/14 02:57:58 peter Exp $
*/
/*
@@ -351,7 +351,7 @@ procfs_abortop(ap)
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
diff --git a/sys/miscfs/union/union_subr.c b/sys/miscfs/union/union_subr.c
index 7f85e65..faf9ec9 100644
--- a/sys/miscfs/union/union_subr.c
+++ b/sys/miscfs/union/union_subr.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)union_subr.c 8.20 (Berkeley) 5/20/95
- * $Id: union_subr.c,v 1.19 1997/08/02 14:32:28 bde Exp $
+ * $Id: union_subr.c,v 1.20 1997/08/14 03:57:46 kato Exp $
*/
#include <sys/param.h>
@@ -740,7 +740,7 @@ union_relookup(um, dvp, vpp, cnp, cn, path, pathlen)
* The pathname buffer will be FREEed by VOP_MKDIR.
*/
cn->cn_namelen = pathlen;
- cn->cn_pnbuf = malloc(cn->cn_namelen+1, M_NAMEI, M_WAITOK);
+ cn->cn_pnbuf = zalloc(namei_zone);
bcopy(path, cn->cn_pnbuf, cn->cn_namelen);
cn->cn_pnbuf[cn->cn_namelen] = '\0';
@@ -760,7 +760,7 @@ union_relookup(um, dvp, vpp, cnp, cn, path, pathlen)
if (!error)
vrele(dvp);
else {
- free(cn->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cn->cn_pnbuf);
cn->cn_pnbuf = '\0';
}
@@ -906,7 +906,7 @@ union_vn_create(vpp, un, p)
* copied in the first place).
*/
cn.cn_namelen = strlen(un->un_path);
- cn.cn_pnbuf = (caddr_t) malloc(cn.cn_namelen+1, M_NAMEI, M_WAITOK);
+ cn.cn_pnbuf = zalloc(namei_zone);
bcopy(un->un_path, cn.cn_pnbuf, cn.cn_namelen+1);
cn.cn_nameiop = CREATE;
cn.cn_flags = (LOCKPARENT|HASBUF|SAVENAME|SAVESTART|ISLASTCN);
diff --git a/sys/msdosfs/msdosfs_vnops.c b/sys/msdosfs/msdosfs_vnops.c
index f4ce26a..8d9bfc5 100644
--- a/sys/msdosfs/msdosfs_vnops.c
+++ b/sys/msdosfs/msdosfs_vnops.c
@@ -1,4 +1,4 @@
-/* $Id: msdosfs_vnops.c,v 1.43 1997/08/26 07:32:39 phk Exp $ */
+/* $Id: msdosfs_vnops.c,v 1.44 1997/09/14 02:57:44 peter Exp $ */
/* $NetBSD: msdosfs_vnops.c,v 1.20 1994/08/21 18:44:13 ws Exp $ */
/*-
@@ -177,9 +177,9 @@ msdosfs_create(ap)
if ((error = createde(&ndirent, pdep, &dep)) == 0) {
*ap->a_vpp = DETOV(dep);
if ((cnp->cn_flags & SAVESTART) == 0)
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
} else {
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
}
vput(ap->a_dvp); /* release parent dir */
return error;
@@ -207,7 +207,7 @@ msdosfs_mknod(ap)
default:
error = EINVAL;
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
break;
}
@@ -1336,7 +1336,7 @@ msdosfs_mkdir(ap)
* change size.
*/
if (pdep->de_StartCluster == MSDOSFSROOT && pdep->de_fndclust == (u_long)-1) {
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return ENOSPC;
}
@@ -1348,7 +1348,7 @@ msdosfs_mkdir(ap)
*/
error = clusteralloc(pmp, 0, 1, CLUST_EOFE, &newcluster, NULL);
if (error) {
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return error;
}
@@ -1376,7 +1376,7 @@ msdosfs_mkdir(ap)
error = bwrite(bp);
if (error) {
clusterfree(pmp, newcluster, NULL);
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return error;
}
@@ -1401,7 +1401,7 @@ msdosfs_mkdir(ap)
} else {
*ap->a_vpp = DETOV(ndep);
}
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
#ifdef MSDOSFS_DEBUG
printf("msdosfs_mkdir(): vput(%08x)\n", ap->a_dvp);
#endif
@@ -1479,7 +1479,7 @@ msdosfs_symlink(ap)
char *a_target;
} */ *ap;
{
- free(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
vput(ap->a_dvp);
return EINVAL;
}
@@ -1794,7 +1794,7 @@ msdosfs_abortop(ap)
} */ *ap;
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return 0;
}
diff --git a/sys/nfs/nfs_common.c b/sys/nfs/nfs_common.c
index e7b5340..4367794 100644
--- a/sys/nfs/nfs_common.c
+++ b/sys/nfs/nfs_common.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_subs.c 8.3 (Berkeley) 1/4/94
- * $Id: nfs_subs.c,v 1.41 1997/08/16 19:15:59 wollman Exp $
+ * $Id: nfs_subs.c,v 1.42 1997/09/10 19:52:26 phk Exp $
*/
/*
@@ -1444,7 +1444,8 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
struct componentname *cnp = &ndp->ni_cnd;
*retdirp = (struct vnode *)0;
- MALLOC(cnp->cn_pnbuf, char *, len + 1, M_NAMEI, M_WAITOK);
+ cnp->cn_pnbuf = zalloc(namei_zone);
+
/*
* Copy the name from the mbuf list to ndp->ni_pnbuf
* and set the various ndp fields appropriately.
@@ -1506,7 +1507,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
* Oh joy. For WebNFS, handle those pesky '%' escapes,
* and the 'native path' indicator.
*/
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
fromcp = cnp->cn_pnbuf;
tocp = cp;
if ((unsigned char)*fromcp >= WEBNFS_SPECCHAR_START) {
@@ -1524,7 +1525,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
*/
default:
error = EIO;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
}
@@ -1540,14 +1541,14 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
continue;
} else {
error = ENOENT;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
} else
*tocp++ = *fromcp++;
}
*tocp = '\0';
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
}
@@ -1601,7 +1602,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
break;
}
if (ndp->ni_pathlen > 1)
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
else
cp = cnp->cn_pnbuf;
aiov.iov_base = cp;
@@ -1617,7 +1618,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
if (error) {
badlink:
if (ndp->ni_pathlen > 1)
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
break;
}
linklen = MAXPATHLEN - auio.uio_resid;
@@ -1631,7 +1632,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
if (ndp->ni_pathlen > 1) {
bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
} else
cnp->cn_pnbuf[linklen] = '\0';
@@ -1649,7 +1650,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
}
out:
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
return (error);
}
diff --git a/sys/nfs/nfs_node.c b/sys/nfs/nfs_node.c
index 66796aa..fe9ae21 100644
--- a/sys/nfs/nfs_node.c
+++ b/sys/nfs/nfs_node.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_node.c 8.6 (Berkeley) 5/22/95
- * $Id: nfs_node.c,v 1.17 1997/05/09 13:04:43 dfr Exp $
+ * $Id: nfs_node.c,v 1.18 1997/08/02 14:33:07 bde Exp $
*/
@@ -373,6 +373,6 @@ nfs_abortop(ap)
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
diff --git a/sys/nfs/nfs_serv.c b/sys/nfs/nfs_serv.c
index b276f19..d275143 100644
--- a/sys/nfs/nfs_serv.c
+++ b/sys/nfs/nfs_serv.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_serv.c 8.3 (Berkeley) 1/12/94
- * $Id: nfs_serv.c,v 1.49 1997/09/10 19:52:25 phk Exp $
+ * $Id: nfs_serv.c,v 1.50 1997/09/10 20:22:28 phk Exp $
*/
/*
@@ -448,7 +448,7 @@ nfsrv_lookup(nfsd, slp, procp, mrq)
nqsrv_getl(ndp->ni_startdir, ND_READ);
vrele(ndp->ni_startdir);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
vp = ndp->ni_vp;
bzero((caddr_t)fhp, sizeof(nfh));
fhp->fh_fsid = vp->v_mount->mnt_stat.f_fsid;
@@ -1460,7 +1460,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap);
if (!error) {
nfsrv_object_create(nd.ni_vp);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
if (exclusive_flag) {
exclusive_flag = 0;
VATTR_NULL(vap);
@@ -1477,7 +1477,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
if (vap->va_type != VFIFO &&
(error = suser(cred, (u_short *)0))) {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
nfsm_reply(0);
@@ -1494,11 +1494,11 @@ nfsrv_create(nfsd, slp, procp, mrq)
nd.ni_cnd.cn_proc = procp;
nd.ni_cnd.cn_cred = cred;
if (error = lookup(&nd)) {
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
nfsm_reply(0);
}
nfsrv_object_create(nd.ni_vp);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
if (nd.ni_cnd.cn_flags & ISSYMLINK) {
vrele(nd.ni_dvp);
vput(nd.ni_vp);
@@ -1508,7 +1508,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
}
} else {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
error = ENXIO;
@@ -1516,7 +1516,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
vp = nd.ni_vp;
} else {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
vp = nd.ni_vp;
if (nd.ni_dvp == vp)
vrele(nd.ni_dvp);
@@ -1571,7 +1571,7 @@ nfsmout:
vrele(dirp);
if (nd.ni_cnd.cn_nameiop) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
@@ -1635,7 +1635,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
vtyp = nfsv3tov_type(*tl);
if (vtyp != VCHR && vtyp != VBLK && vtyp != VSOCK && vtyp != VFIFO) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
error = NFSERR_BADTYPE;
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
@@ -1655,7 +1655,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
*/
if (nd.ni_vp) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
error = EEXIST;
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
@@ -1667,11 +1667,11 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
nqsrv_getl(nd.ni_dvp, ND_WRITE);
error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap);
if (!error)
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
} else {
if (vtyp != VFIFO && (error = suser(cred, (u_short *)0))) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
goto out;
@@ -1686,7 +1686,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
nd.ni_cnd.cn_proc = procp;
nd.ni_cnd.cn_cred = procp->p_ucred;
error = lookup(&nd);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
if (error)
goto out;
if (nd.ni_cnd.cn_flags & ISSYMLINK) {
@@ -1720,7 +1720,7 @@ nfsmout:
vrele(dirp);
if (nd.ni_cnd.cn_nameiop) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
@@ -1989,7 +1989,7 @@ out:
error = 0;
}
vrele(tond.ni_startdir);
- FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, tond.ni_cnd.cn_pnbuf);
out1:
if (fdirp) {
fdiraft_ret = VOP_GETATTR(fdirp, &fdiraft, cred, procp);
@@ -2000,7 +2000,7 @@ out1:
vrele(tdirp);
}
vrele(fromnd.ni_startdir);
- FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf);
nfsm_reply(2 * NFSX_WCCDATA(v3));
if (v3) {
nfsm_srvwcc_data(fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft);
@@ -2015,11 +2015,11 @@ nfsmout:
vrele(tdirp);
if (tond.ni_cnd.cn_nameiop) {
vrele(tond.ni_startdir);
- FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, tond.ni_cnd.cn_pnbuf);
}
if (fromnd.ni_cnd.cn_nameiop) {
vrele(fromnd.ni_startdir);
- FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(fromnd.ni_dvp, &fromnd.ni_cnd);
vrele(fromnd.ni_dvp);
vrele(fvp);
@@ -2199,7 +2199,7 @@ nfsrv_symlink(nfsd, slp, procp, mrq)
*(pathcp + len2) = '\0';
if (nd.ni_vp) {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
vrele(nd.ni_dvp);
@@ -2232,7 +2232,7 @@ nfsrv_symlink(nfsd, slp, procp, mrq)
}
} else
vrele(nd.ni_startdir);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
out:
if (pathcp)
@@ -2253,7 +2253,7 @@ out:
nfsmout:
if (nd.ni_cnd.cn_nameiop) {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
if (dirp)
vrele(dirp);
diff --git a/sys/nfs/nfs_subs.c b/sys/nfs/nfs_subs.c
index e7b5340..4367794 100644
--- a/sys/nfs/nfs_subs.c
+++ b/sys/nfs/nfs_subs.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_subs.c 8.3 (Berkeley) 1/4/94
- * $Id: nfs_subs.c,v 1.41 1997/08/16 19:15:59 wollman Exp $
+ * $Id: nfs_subs.c,v 1.42 1997/09/10 19:52:26 phk Exp $
*/
/*
@@ -1444,7 +1444,8 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
struct componentname *cnp = &ndp->ni_cnd;
*retdirp = (struct vnode *)0;
- MALLOC(cnp->cn_pnbuf, char *, len + 1, M_NAMEI, M_WAITOK);
+ cnp->cn_pnbuf = zalloc(namei_zone);
+
/*
* Copy the name from the mbuf list to ndp->ni_pnbuf
* and set the various ndp fields appropriately.
@@ -1506,7 +1507,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
* Oh joy. For WebNFS, handle those pesky '%' escapes,
* and the 'native path' indicator.
*/
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
fromcp = cnp->cn_pnbuf;
tocp = cp;
if ((unsigned char)*fromcp >= WEBNFS_SPECCHAR_START) {
@@ -1524,7 +1525,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
*/
default:
error = EIO;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
}
@@ -1540,14 +1541,14 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
continue;
} else {
error = ENOENT;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
} else
*tocp++ = *fromcp++;
}
*tocp = '\0';
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
}
@@ -1601,7 +1602,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
break;
}
if (ndp->ni_pathlen > 1)
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
else
cp = cnp->cn_pnbuf;
aiov.iov_base = cp;
@@ -1617,7 +1618,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
if (error) {
badlink:
if (ndp->ni_pathlen > 1)
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
break;
}
linklen = MAXPATHLEN - auio.uio_resid;
@@ -1631,7 +1632,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
if (ndp->ni_pathlen > 1) {
bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
} else
cnp->cn_pnbuf[linklen] = '\0';
@@ -1649,7 +1650,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
}
out:
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
return (error);
}
diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c
index 87b1823..278e4f3 100644
--- a/sys/nfs/nfs_vnops.c
+++ b/sys/nfs/nfs_vnops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_vnops.c 8.16 (Berkeley) 5/27/95
- * $Id: nfs_vnops.c,v 1.59 1997/09/10 21:27:40 phk Exp $
+ * $Id: nfs_vnops.c,v 1.60 1997/09/14 03:00:44 peter Exp $
*/
@@ -1302,7 +1302,7 @@ nfs_mknodrpc(dvp, vpp, cnp, vap)
cache_enter(dvp, newvp, cnp);
*vpp = newvp;
}
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
@@ -1437,7 +1437,7 @@ again:
cache_enter(dvp, newvp, cnp);
*ap->a_vpp = newvp;
}
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
@@ -1508,7 +1508,7 @@ nfs_remove(ap)
error = 0;
} else if (!np->n_sillyrename)
error = nfs_sillyrename(dvp, vp, cnp);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
np->n_attrstamp = 0;
vput(dvp);
if (vp == dvp)
@@ -1743,7 +1743,7 @@ nfs_link(ap)
nfsm_wcc_data(tdvp, wccflag);
}
nfsm_reqdone;
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(tdvp)->n_flag |= NMODIFIED;
if (!attrflag)
VTONFS(vp)->n_attrstamp = 0;
@@ -1815,7 +1815,7 @@ nfs_symlink(ap)
nfsm_reqdone;
if (newvp)
vput(newvp);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
@@ -1912,7 +1912,7 @@ nfs_mkdir(ap)
vrele(newvp);
} else
*ap->a_vpp = newvp;
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vput(dvp);
return (error);
}
@@ -1948,7 +1948,7 @@ nfs_rmdir(ap)
if (v3)
nfsm_wcc_data(dvp, wccflag);
nfsm_reqdone;
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
diff --git a/sys/nfsclient/nfs_node.c b/sys/nfsclient/nfs_node.c
index 66796aa..fe9ae21 100644
--- a/sys/nfsclient/nfs_node.c
+++ b/sys/nfsclient/nfs_node.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_node.c 8.6 (Berkeley) 5/22/95
- * $Id: nfs_node.c,v 1.17 1997/05/09 13:04:43 dfr Exp $
+ * $Id: nfs_node.c,v 1.18 1997/08/02 14:33:07 bde Exp $
*/
@@ -373,6 +373,6 @@ nfs_abortop(ap)
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
diff --git a/sys/nfsclient/nfs_subs.c b/sys/nfsclient/nfs_subs.c
index e7b5340..4367794 100644
--- a/sys/nfsclient/nfs_subs.c
+++ b/sys/nfsclient/nfs_subs.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_subs.c 8.3 (Berkeley) 1/4/94
- * $Id: nfs_subs.c,v 1.41 1997/08/16 19:15:59 wollman Exp $
+ * $Id: nfs_subs.c,v 1.42 1997/09/10 19:52:26 phk Exp $
*/
/*
@@ -1444,7 +1444,8 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
struct componentname *cnp = &ndp->ni_cnd;
*retdirp = (struct vnode *)0;
- MALLOC(cnp->cn_pnbuf, char *, len + 1, M_NAMEI, M_WAITOK);
+ cnp->cn_pnbuf = zalloc(namei_zone);
+
/*
* Copy the name from the mbuf list to ndp->ni_pnbuf
* and set the various ndp fields appropriately.
@@ -1506,7 +1507,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
* Oh joy. For WebNFS, handle those pesky '%' escapes,
* and the 'native path' indicator.
*/
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
fromcp = cnp->cn_pnbuf;
tocp = cp;
if ((unsigned char)*fromcp >= WEBNFS_SPECCHAR_START) {
@@ -1524,7 +1525,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
*/
default:
error = EIO;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
}
@@ -1540,14 +1541,14 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
continue;
} else {
error = ENOENT;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
} else
*tocp++ = *fromcp++;
}
*tocp = '\0';
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
}
@@ -1601,7 +1602,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
break;
}
if (ndp->ni_pathlen > 1)
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
else
cp = cnp->cn_pnbuf;
aiov.iov_base = cp;
@@ -1617,7 +1618,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
if (error) {
badlink:
if (ndp->ni_pathlen > 1)
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
break;
}
linklen = MAXPATHLEN - auio.uio_resid;
@@ -1631,7 +1632,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
if (ndp->ni_pathlen > 1) {
bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
} else
cnp->cn_pnbuf[linklen] = '\0';
@@ -1649,7 +1650,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
}
out:
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
return (error);
}
diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c
index 87b1823..278e4f3 100644
--- a/sys/nfsclient/nfs_vnops.c
+++ b/sys/nfsclient/nfs_vnops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_vnops.c 8.16 (Berkeley) 5/27/95
- * $Id: nfs_vnops.c,v 1.59 1997/09/10 21:27:40 phk Exp $
+ * $Id: nfs_vnops.c,v 1.60 1997/09/14 03:00:44 peter Exp $
*/
@@ -1302,7 +1302,7 @@ nfs_mknodrpc(dvp, vpp, cnp, vap)
cache_enter(dvp, newvp, cnp);
*vpp = newvp;
}
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
@@ -1437,7 +1437,7 @@ again:
cache_enter(dvp, newvp, cnp);
*ap->a_vpp = newvp;
}
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
@@ -1508,7 +1508,7 @@ nfs_remove(ap)
error = 0;
} else if (!np->n_sillyrename)
error = nfs_sillyrename(dvp, vp, cnp);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
np->n_attrstamp = 0;
vput(dvp);
if (vp == dvp)
@@ -1743,7 +1743,7 @@ nfs_link(ap)
nfsm_wcc_data(tdvp, wccflag);
}
nfsm_reqdone;
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(tdvp)->n_flag |= NMODIFIED;
if (!attrflag)
VTONFS(vp)->n_attrstamp = 0;
@@ -1815,7 +1815,7 @@ nfs_symlink(ap)
nfsm_reqdone;
if (newvp)
vput(newvp);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
@@ -1912,7 +1912,7 @@ nfs_mkdir(ap)
vrele(newvp);
} else
*ap->a_vpp = newvp;
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vput(dvp);
return (error);
}
@@ -1948,7 +1948,7 @@ nfs_rmdir(ap)
if (v3)
nfsm_wcc_data(dvp, wccflag);
nfsm_reqdone;
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VTONFS(dvp)->n_flag |= NMODIFIED;
if (!wccflag)
VTONFS(dvp)->n_attrstamp = 0;
diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c
index b276f19..d275143 100644
--- a/sys/nfsserver/nfs_serv.c
+++ b/sys/nfsserver/nfs_serv.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_serv.c 8.3 (Berkeley) 1/12/94
- * $Id: nfs_serv.c,v 1.49 1997/09/10 19:52:25 phk Exp $
+ * $Id: nfs_serv.c,v 1.50 1997/09/10 20:22:28 phk Exp $
*/
/*
@@ -448,7 +448,7 @@ nfsrv_lookup(nfsd, slp, procp, mrq)
nqsrv_getl(ndp->ni_startdir, ND_READ);
vrele(ndp->ni_startdir);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
vp = ndp->ni_vp;
bzero((caddr_t)fhp, sizeof(nfh));
fhp->fh_fsid = vp->v_mount->mnt_stat.f_fsid;
@@ -1460,7 +1460,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap);
if (!error) {
nfsrv_object_create(nd.ni_vp);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
if (exclusive_flag) {
exclusive_flag = 0;
VATTR_NULL(vap);
@@ -1477,7 +1477,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
if (vap->va_type != VFIFO &&
(error = suser(cred, (u_short *)0))) {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
nfsm_reply(0);
@@ -1494,11 +1494,11 @@ nfsrv_create(nfsd, slp, procp, mrq)
nd.ni_cnd.cn_proc = procp;
nd.ni_cnd.cn_cred = cred;
if (error = lookup(&nd)) {
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
nfsm_reply(0);
}
nfsrv_object_create(nd.ni_vp);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
if (nd.ni_cnd.cn_flags & ISSYMLINK) {
vrele(nd.ni_dvp);
vput(nd.ni_vp);
@@ -1508,7 +1508,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
}
} else {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
error = ENXIO;
@@ -1516,7 +1516,7 @@ nfsrv_create(nfsd, slp, procp, mrq)
vp = nd.ni_vp;
} else {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
vp = nd.ni_vp;
if (nd.ni_dvp == vp)
vrele(nd.ni_dvp);
@@ -1571,7 +1571,7 @@ nfsmout:
vrele(dirp);
if (nd.ni_cnd.cn_nameiop) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
@@ -1635,7 +1635,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
vtyp = nfsv3tov_type(*tl);
if (vtyp != VCHR && vtyp != VBLK && vtyp != VSOCK && vtyp != VFIFO) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
error = NFSERR_BADTYPE;
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
@@ -1655,7 +1655,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
*/
if (nd.ni_vp) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
error = EEXIST;
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
@@ -1667,11 +1667,11 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
nqsrv_getl(nd.ni_dvp, ND_WRITE);
error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, vap);
if (!error)
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
} else {
if (vtyp != VFIFO && (error = suser(cred, (u_short *)0))) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
vput(nd.ni_dvp);
goto out;
@@ -1686,7 +1686,7 @@ nfsrv_mknod(nfsd, slp, procp, mrq)
nd.ni_cnd.cn_proc = procp;
nd.ni_cnd.cn_cred = procp->p_ucred;
error = lookup(&nd);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
if (error)
goto out;
if (nd.ni_cnd.cn_flags & ISSYMLINK) {
@@ -1720,7 +1720,7 @@ nfsmout:
vrele(dirp);
if (nd.ni_cnd.cn_nameiop) {
vrele(nd.ni_startdir);
- free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
@@ -1989,7 +1989,7 @@ out:
error = 0;
}
vrele(tond.ni_startdir);
- FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, tond.ni_cnd.cn_pnbuf);
out1:
if (fdirp) {
fdiraft_ret = VOP_GETATTR(fdirp, &fdiraft, cred, procp);
@@ -2000,7 +2000,7 @@ out1:
vrele(tdirp);
}
vrele(fromnd.ni_startdir);
- FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf);
nfsm_reply(2 * NFSX_WCCDATA(v3));
if (v3) {
nfsm_srvwcc_data(fdirfor_ret, &fdirfor, fdiraft_ret, &fdiraft);
@@ -2015,11 +2015,11 @@ nfsmout:
vrele(tdirp);
if (tond.ni_cnd.cn_nameiop) {
vrele(tond.ni_startdir);
- FREE(tond.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, tond.ni_cnd.cn_pnbuf);
}
if (fromnd.ni_cnd.cn_nameiop) {
vrele(fromnd.ni_startdir);
- FREE(fromnd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, fromnd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(fromnd.ni_dvp, &fromnd.ni_cnd);
vrele(fromnd.ni_dvp);
vrele(fvp);
@@ -2199,7 +2199,7 @@ nfsrv_symlink(nfsd, slp, procp, mrq)
*(pathcp + len2) = '\0';
if (nd.ni_vp) {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
vrele(nd.ni_dvp);
@@ -2232,7 +2232,7 @@ nfsrv_symlink(nfsd, slp, procp, mrq)
}
} else
vrele(nd.ni_startdir);
- FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
out:
if (pathcp)
@@ -2253,7 +2253,7 @@ out:
nfsmout:
if (nd.ni_cnd.cn_nameiop) {
vrele(nd.ni_startdir);
- free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, nd.ni_cnd.cn_pnbuf);
}
if (dirp)
vrele(dirp);
diff --git a/sys/nfsserver/nfs_srvsubs.c b/sys/nfsserver/nfs_srvsubs.c
index e7b5340..4367794 100644
--- a/sys/nfsserver/nfs_srvsubs.c
+++ b/sys/nfsserver/nfs_srvsubs.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)nfs_subs.c 8.3 (Berkeley) 1/4/94
- * $Id: nfs_subs.c,v 1.41 1997/08/16 19:15:59 wollman Exp $
+ * $Id: nfs_subs.c,v 1.42 1997/09/10 19:52:26 phk Exp $
*/
/*
@@ -1444,7 +1444,8 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
struct componentname *cnp = &ndp->ni_cnd;
*retdirp = (struct vnode *)0;
- MALLOC(cnp->cn_pnbuf, char *, len + 1, M_NAMEI, M_WAITOK);
+ cnp->cn_pnbuf = zalloc(namei_zone);
+
/*
* Copy the name from the mbuf list to ndp->ni_pnbuf
* and set the various ndp fields appropriately.
@@ -1506,7 +1507,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
* Oh joy. For WebNFS, handle those pesky '%' escapes,
* and the 'native path' indicator.
*/
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
fromcp = cnp->cn_pnbuf;
tocp = cp;
if ((unsigned char)*fromcp >= WEBNFS_SPECCHAR_START) {
@@ -1524,7 +1525,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
*/
default:
error = EIO;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
}
@@ -1540,14 +1541,14 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
continue;
} else {
error = ENOENT;
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
goto out;
}
} else
*tocp++ = *fromcp++;
}
*tocp = '\0';
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
}
@@ -1601,7 +1602,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
break;
}
if (ndp->ni_pathlen > 1)
- MALLOC(cp, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
+ cp = zalloc(namei_zone);
else
cp = cnp->cn_pnbuf;
aiov.iov_base = cp;
@@ -1617,7 +1618,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
if (error) {
badlink:
if (ndp->ni_pathlen > 1)
- FREE(cp, M_NAMEI);
+ zfree(namei_zone, cp);
break;
}
linklen = MAXPATHLEN - auio.uio_resid;
@@ -1631,7 +1632,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
if (ndp->ni_pathlen > 1) {
bcopy(ndp->ni_next, cp + linklen, ndp->ni_pathlen);
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_pnbuf = cp;
} else
cnp->cn_pnbuf[linklen] = '\0';
@@ -1649,7 +1650,7 @@ nfs_namei(ndp, fhp, len, slp, nam, mdp, dposp, retdirp, p, kerbflag, pubflag)
}
}
out:
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
return (error);
}
diff --git a/sys/sys/lock.h b/sys/sys/lock.h
index 6d7544e..af98a7a 100644
--- a/sys/sys/lock.h
+++ b/sys/sys/lock.h
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)lock.h 8.12 (Berkeley) 5/19/95
- * $Id: lock.h,v 1.8 1997/08/18 02:06:30 dyson Exp $
+ * $Id: lock.h,v 1.9 1997/08/30 07:59:47 fsmp Exp $
*/
#ifndef _LOCK_H_
@@ -108,11 +108,12 @@ struct lock {
* or passed in as arguments to the lock manager. The LK_REENABLE flag may be
* set only at the release of a lock obtained by drain.
*/
-#define LK_EXTFLG_MASK 0x00000070 /* mask of external flags */
+#define LK_EXTFLG_MASK 0x01000070 /* mask of external flags */
#define LK_NOWAIT 0x00000010 /* do not sleep to await lock */
#define LK_SLEEPFAIL 0x00000020 /* sleep, then return failure */
#define LK_CANRECURSE 0x00000040 /* allow recursive exclusive lock */
#define LK_REENABLE 0x00000080 /* lock is be reenabled after drain */
+#define LK_NOPAUSE 0x01000000 /* no spinloop */
/*
* Internal lock flags.
*
diff --git a/sys/sys/lockmgr.h b/sys/sys/lockmgr.h
index 6d7544e..af98a7a 100644
--- a/sys/sys/lockmgr.h
+++ b/sys/sys/lockmgr.h
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)lock.h 8.12 (Berkeley) 5/19/95
- * $Id: lock.h,v 1.8 1997/08/18 02:06:30 dyson Exp $
+ * $Id: lock.h,v 1.9 1997/08/30 07:59:47 fsmp Exp $
*/
#ifndef _LOCK_H_
@@ -108,11 +108,12 @@ struct lock {
* or passed in as arguments to the lock manager. The LK_REENABLE flag may be
* set only at the release of a lock obtained by drain.
*/
-#define LK_EXTFLG_MASK 0x00000070 /* mask of external flags */
+#define LK_EXTFLG_MASK 0x01000070 /* mask of external flags */
#define LK_NOWAIT 0x00000010 /* do not sleep to await lock */
#define LK_SLEEPFAIL 0x00000020 /* sleep, then return failure */
#define LK_CANRECURSE 0x00000040 /* allow recursive exclusive lock */
#define LK_REENABLE 0x00000080 /* lock is be reenabled after drain */
+#define LK_NOPAUSE 0x01000000 /* no spinloop */
/*
* Internal lock flags.
*
diff --git a/sys/sys/malloc.h b/sys/sys/malloc.h
index 7758629..2800861 100644
--- a/sys/sys/malloc.h
+++ b/sys/sys/malloc.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)malloc.h 8.5 (Berkeley) 5/3/95
- * $Id: malloc.h,v 1.23 1997/08/16 19:16:10 wollman Exp $
+ * $Id: malloc.h,v 1.24 1997/09/16 13:52:04 bde Exp $
*/
#ifndef _SYS_MALLOC_H_
@@ -272,6 +272,12 @@ struct kmembuckets {
};
#ifdef KERNEL
+
+#include <vm/vm_zone.h>
+
+
+#include <vm/vm_zone.h>
+
#define MINALLOCSIZE (1 << MINBUCKET)
#define BUCKETINDX(size) \
((size) <= (MINALLOCSIZE * 128) \
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index ac38919..acbccb5 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)vnode.h 8.7 (Berkeley) 2/4/94
- * $Id: vnode.h,v 1.47 1997/08/31 07:32:35 phk Exp $
+ * $Id: vnode.h,v 1.48 1997/09/14 02:25:41 peter Exp $
*/
#ifndef _SYS_VNODE_H_
@@ -453,6 +453,9 @@ struct uio;
struct vattr;
struct vnode;
struct vop_bwrite_args;
+struct vm_zone;
+
+extern struct vm_zone *namei_zone;
extern int (*lease_check_hook) __P((struct vop_lease_args *));
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index 5576990..76b5b92 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95
- * $Id: ufs_vnops.c,v 1.56 1997/09/02 20:06:59 bde Exp $
+ * $Id: ufs_vnops.c,v 1.57 1997/09/14 02:58:12 peter Exp $
*/
#include "opt_quota.h"
@@ -740,7 +740,7 @@ ufs_link(ap)
ip->i_nlink--;
ip->i_flag |= IN_CHANGE;
}
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
out1:
if (tdvp != vp)
VOP_UNLOCK(vp, 0, p);
@@ -800,7 +800,7 @@ ufs_whiteout(ap)
break;
}
if (cnp->cn_flags & HASBUF) {
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
cnp->cn_flags &= ~HASBUF;
}
return (error);
@@ -1342,7 +1342,7 @@ ufs_mkdir(ap)
#ifdef QUOTA
if ((error = getinoquota(ip)) ||
(error = chkiq(ip, 1, cnp->cn_cred, 0))) {
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VOP_VFREE(tvp, ip->i_number, dmode);
vput(tvp);
vput(dvp);
@@ -1434,7 +1434,7 @@ bad:
} else
*ap->a_vpp = tvp;
out:
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vput(dvp);
return (error);
#ifdef EXT2FS
@@ -1718,7 +1718,7 @@ ufs_abortop(ap)
} */ *ap;
{
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
- FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, ap->a_cnp->cn_pnbuf);
return (0);
}
@@ -2093,7 +2093,7 @@ ufs_makeinode(mode, dvp, vpp, cnp)
error = VOP_VALLOC(dvp, mode, cnp->cn_cred, &tvp);
if (error) {
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vput(dvp);
return (error);
}
@@ -2103,7 +2103,7 @@ ufs_makeinode(mode, dvp, vpp, cnp)
#ifdef QUOTA
if ((error = getinoquota(ip)) ||
(error = chkiq(ip, 1, cnp->cn_cred, 0))) {
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
VOP_VFREE(tvp, ip->i_number, mode);
vput(tvp);
vput(dvp);
@@ -2141,7 +2141,7 @@ ufs_makeinode(mode, dvp, vpp, cnp)
goto bad;
if ((cnp->cn_flags & SAVESTART) == 0)
- FREE(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vput(dvp);
*vpp = tvp;
return (0);
@@ -2151,7 +2151,7 @@ bad:
* Write error occurred trying to update the inode
* or the directory so must deallocate the inode.
*/
- free(cnp->cn_pnbuf, M_NAMEI);
+ zfree(namei_zone, cnp->cn_pnbuf);
vput(dvp);
ip->i_nlink = 0;
ip->i_flag |= IN_CHANGE;
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 1b7e1ac..d4235ad 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -61,7 +61,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_map.c,v 1.89 1997/09/01 03:17:18 bde Exp $
+ * $Id: vm_map.c,v 1.90 1997/09/12 15:58:47 jlemon Exp $
*/
/*
@@ -214,8 +214,9 @@ vm_init2(void) {
zinitna(mapentzone, &mapentobj,
NULL, 0, 0, 0, 4);
zinitna(mapzone, &mapobj,
- NULL, 0, 0, 0, 1);
+ NULL, 0, 0, 0, 2);
pmap_init2();
+ vm_object_init2();
}
void
@@ -684,8 +685,12 @@ vm_map_findspace(map, start, length, addr)
}
SAVE_HINT(map, entry);
*addr = start;
- if (map == kernel_map && round_page(start + length) > kernel_vm_end)
- pmap_growkernel(round_page(start + length));
+ if (map == kernel_map) {
+ vm_offset_t ksize;
+ if ((ksize = round_page(start + length)) > kernel_vm_end) {
+ pmap_growkernel(ksize);
+ }
+ }
return (0);
}
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 40a4a50..388cc5f 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -61,7 +61,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_object.c,v 1.96 1997/09/01 02:55:48 bde Exp $
+ * $Id: vm_object.c,v 1.97 1997/09/01 03:17:22 bde Exp $
*/
/*
@@ -89,6 +89,7 @@
#include <vm/swap_pager.h>
#include <vm/vm_kern.h>
#include <vm/vm_extern.h>
+#include <vm/vm_zone.h>
static void vm_object_qcollapse __P((vm_object_t object));
#ifdef not_used
@@ -138,6 +139,10 @@ extern int vm_pageout_page_count;
static long object_collapses;
static long object_bypasses;
static int next_index;
+static vm_zone_t obj_zone;
+static struct vm_zone obj_zone_store;
+#define VM_OBJECTS_INIT 256
+struct vm_object vm_objects_init[VM_OBJECTS_INIT];
void
_vm_object_allocate(type, size, object)
@@ -145,6 +150,7 @@ _vm_object_allocate(type, size, object)
vm_size_t size;
register vm_object_t object;
{
+ int incr;
TAILQ_INIT(&object->memq);
TAILQ_INIT(&object->shadow_head);
@@ -157,7 +163,11 @@ _vm_object_allocate(type, size, object)
object->resident_page_count = 0;
object->shadow_count = 0;
object->pg_color = next_index;
- next_index = (next_index + PQ_PRIME1) & PQ_L2_MASK;
+ if ( size > (PQ_L2_SIZE / 3 + PQ_PRIME1))
+ incr = PQ_L2_SIZE / 3 + PQ_PRIME1;
+ else
+ incr = size;
+ next_index = (next_index + incr) & PQ_L2_MASK;
object->handle = NULL;
object->paging_offset = (vm_ooffset_t) 0;
object->backing_object = NULL;
@@ -194,6 +204,15 @@ vm_object_init()
kmem_object = &kmem_object_store;
_vm_object_allocate(OBJT_DEFAULT, OFF_TO_IDX(VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS),
kmem_object);
+
+ obj_zone = &obj_zone_store;
+ zbootinit(obj_zone, "VM OBJECT", sizeof (struct vm_object),
+ vm_objects_init, VM_OBJECTS_INIT);
+}
+
+void
+vm_object_init2() {
+ zinitna(obj_zone, NULL, NULL, 0, 0, 0, 4);
}
/*
@@ -208,10 +227,7 @@ vm_object_allocate(type, size)
vm_size_t size;
{
register vm_object_t result;
-
- result = (vm_object_t)
- malloc((u_long) sizeof *result, M_VMOBJ, M_WAITOK);
-
+ result = (vm_object_t) zalloc(obj_zone);
_vm_object_allocate(type, size, result);
@@ -429,7 +445,7 @@ vm_object_terminate(object)
/*
* Free the space for the object.
*/
- free((caddr_t) object, M_VMOBJ);
+ zfree(obj_zone, object);
}
/*
@@ -1102,7 +1118,7 @@ vm_object_collapse(object)
object_list);
vm_object_count--;
- free((caddr_t) backing_object, M_VMOBJ);
+ zfree(obj_zone, backing_object);
object_collapses++;
} else {
diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h
index d6aaa00..e2ef694 100644
--- a/sys/vm/vm_object.h
+++ b/sys/vm/vm_object.h
@@ -61,7 +61,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_object.h,v 1.36 1997/08/05 00:02:06 dyson Exp $
+ * $Id: vm_object.h,v 1.37 1997/09/01 02:55:50 bde Exp $
*/
/*
@@ -183,6 +183,7 @@ void vm_object_pmap_remove __P((vm_object_t, vm_pindex_t, vm_pindex_t));
void vm_object_reference __P((vm_object_t));
void vm_object_shadow __P((vm_object_t *, vm_ooffset_t *, vm_size_t));
void vm_object_madvise __P((vm_object_t, vm_pindex_t, int, int));
+void vm_object_init2 __P((void));
#endif /* KERNEL */
#endif /* _VM_OBJECT_ */
diff --git a/sys/vm/vm_zone.c b/sys/vm/vm_zone.c
index 6792a4c..38c43db 100644
--- a/sys/vm/vm_zone.c
+++ b/sys/vm/vm_zone.c
@@ -18,7 +18,7 @@
* 5. Modifications may be freely made to this file if the above conditions
* are met.
*
- * $Id: vm_zone.c,v 1.5 1997/08/18 03:29:21 fsmp Exp $
+ * $Id: vm_zone.c,v 1.6 1997/09/01 03:17:32 bde Exp $
*/
#include <sys/param.h>
@@ -79,13 +79,14 @@ zinitna(vm_zone_t z, vm_object_t obj, char *name, int size,
int totsize;
if ((z->zflags & ZONE_BOOT) == 0) {
- z->zsize = size;
+ z->zsize = (size + 32 - 1) & ~(32 - 1);
simple_lock_init(&z->zlock);
z->zfreecnt = 0;
z->ztotal = 0;
z->zmax = 0;
z->zname = name;
z->znalloc = 0;
+ z->zitems = NULL;
if (zlist == 0) {
zlist = z;
@@ -183,8 +184,12 @@ zbootinit(vm_zone_t z, char *name, int size, void *item, int nitems) {
z->znalloc = 0;
simple_lock_init(&z->zlock);
+ z->zitems = NULL;
for (i = 0; i < nitems; i++) {
- * (void **) item = z->zitems;
+ ((void **) item)[0] = z->zitems;
+#if defined(DIAGNOSTIC)
+ ((void **) item)[1] = (void *) ZENTRY_FREE;
+#endif
z->zitems = item;
(char *) item += z->zsize;
}
@@ -263,9 +268,12 @@ void *
_zget(vm_zone_t z) {
int i;
vm_page_t m;
- int nitems;
+ int nitems, nbytes;
void *item;
+ if (z == NULL)
+ panic("zget: null zone");
+
if (z->zflags & ZONE_INTERRUPT) {
item = (char *) z->zkva + z->zpagecount * PAGE_SIZE;
for( i = 0; ((i < z->zalloc) && (z->zpagecount < z->zpagemax)); i++) {
@@ -280,11 +288,26 @@ _zget(vm_zone_t z) {
}
nitems = (i * PAGE_SIZE) / z->zsize;
} else {
+ nbytes = z->zalloc * PAGE_SIZE;
/*
* We can wait, so just do normal kernel map allocation
*/
- item = (void *) kmem_alloc(kernel_map, z->zalloc * PAGE_SIZE);
- nitems = (z->zalloc * PAGE_SIZE) / z->zsize;
+ item = (void *) kmem_alloc(kernel_map, nbytes);
+
+#if 0
+ if (z->zname)
+ printf("zalloc: %s, %d (0x%x --> 0x%x)\n",
+ z->zname, z->zalloc, item, (char *)item + nbytes);
+ else
+ printf("zalloc: XXX(%d), %d (0x%x --> 0x%x)\n",
+ z->zsize, z->zalloc, item, (char *)item + nbytes);
+
+ for(i=0;i<nbytes;i+=PAGE_SIZE) {
+ printf("(%x, %x)", (char *) item + i, pmap_kextract( (char *) item + i));
+ }
+ printf("\n");
+#endif
+ nitems = nbytes / z->zsize;
}
z->ztotal += nitems;
@@ -294,14 +317,22 @@ _zget(vm_zone_t z) {
if (nitems != 0) {
nitems -= 1;
for (i = 0; i < nitems; i++) {
- * (void **) item = z->zitems;
+ ((void **) item)[0] = z->zitems;
+#if defined(DIAGNOSTIC)
+ ((void **) item)[1] = (void *) ZENTRY_FREE;
+#endif
z->zitems = item;
(char *) item += z->zsize;
}
z->zfreecnt += nitems;
} else if (z->zfreecnt > 0) {
item = z->zitems;
- z->zitems = *(void **) item;
+ z->zitems = ((void **) item)[0];
+#if defined(DIAGNOSTIC)
+ if (((void **) item)[1] != (void *) ZENTRY_FREE)
+ zerror(ZONE_ERROR_NOTFREE);
+ ((void **) item)[1] = 0;
+#endif
z->zfreecnt--;
} else {
item = NULL;
@@ -356,5 +387,28 @@ sysctl_vm_zone SYSCTL_HANDLER_ARGS
return (0);
}
+#if defined(DIAGNOSTIC)
+void
+zerror(int error) {
+ char *msg;
+ switch (error) {
+case ZONE_ERROR_INVALID:
+ msg = "zone: invalid zone";
+ break;
+case ZONE_ERROR_NOTFREE:
+ msg = "zone: entry not free";
+ break;
+case ZONE_ERROR_ALREADYFREE:
+ msg = "zone: freeing free entry";
+ break;
+default:
+ msg = "zone: invalid error";
+ break;
+ }
+
+ panic(msg);
+}
+#endif
+
SYSCTL_OID(_kern, OID_AUTO, zone, CTLTYPE_STRING|CTLFLAG_RD, \
NULL, 0, sysctl_vm_zone, "A", "Zone Info");
diff --git a/sys/vm/vm_zone.h b/sys/vm/vm_zone.h
index fe42f49..6ecc7d2 100644
--- a/sys/vm/vm_zone.h
+++ b/sys/vm/vm_zone.h
@@ -19,7 +19,7 @@
* 5. Modifications may be freely made to this file if the above conditions
* are met.
*
- * $Id: vm_zone.h,v 1.4 1997/08/07 03:52:55 dyson Exp $
+ * $Id: vm_zone.h,v 1.5 1997/08/10 00:12:13 dyson Exp $
*/
#if !defined(_SYS_ZONE_H)
@@ -54,6 +54,7 @@ typedef struct vm_zone {
} *vm_zone_t;
+void zerror __P((int)) __dead2;
vm_zone_t zinit __P((char *name, int size, int nentries, int flags, int zalloc));
int zinitna __P((vm_zone_t z, struct vm_object *obj, char *name, int size,
int nentries, int flags, int zalloc));
@@ -64,6 +65,12 @@ void zfreei __P((vm_zone_t z, void *item));
void zbootinit __P((vm_zone_t z, char *name, int size, void *item, int nitems));
void * _zget __P((vm_zone_t z));
+#define ZONE_ERROR_INVALID 0
+#define ZONE_ERROR_NOTFREE 1
+#define ZONE_ERROR_ALREADYFREE 2
+
+
+#define ZENTRY_FREE 0x12342378
/*
* void *zalloc(vm_zone_t zone) --
* Returns an item from a specified zone.
@@ -75,12 +82,23 @@ static __inline__ void *
_zalloc(vm_zone_t z) {
void *item;
+#if defined(DIAGNOSTIC)
+ if (z == 0)
+ zerror(ZONE_ERROR_INVALID);
+#endif
+
if (z->zfreecnt <= z->zfreemin) {
return _zget(z);
}
item = z->zitems;
- z->zitems = *(void **) item;
+ z->zitems = ((void **) item)[0];
+#if defined(DIAGNOSTIC)
+ if (((void **) item)[1] != (void *) ZENTRY_FREE)
+ zerror(ZONE_ERROR_NOTFREE);
+ ((void **) item)[1] = 0;
+#endif
+
z->zfreecnt--;
z->znalloc++;
return item;
@@ -88,14 +106,19 @@ _zalloc(vm_zone_t z) {
static __inline__ void
_zfree(vm_zone_t z, void *item) {
- * (void **) item = z->zitems;
+ ((void **) item)[0] = z->zitems;
+#if defined(DIAGNOSTIC)
+ if ((( void **) item)[1] == (void *) ZENTRY_FREE)
+ zerror(ZONE_ERROR_ALREADYFREE);
+ ((void **) item)[1] = (void *) ZENTRY_FREE;
+#endif
z->zitems = item;
z->zfreecnt++;
}
static __inline__ void *
zalloc(vm_zone_t z) {
-#if NCPU > 1
+#if defined(SMP)
return zalloci(z);
#else
return _zalloc(z);
@@ -104,7 +127,7 @@ zalloc(vm_zone_t z) {
static __inline__ void
zfree(vm_zone_t z, void *item) {
-#if NCPU > 1
+#if defined(SMP)
zfreei(z, item);
#else
_zfree(z, item);
OpenPOWER on IntegriCloud