summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/vm/page_lock.c
diff options
context:
space:
mode:
authorjohansen <none@none>2006-12-19 23:13:06 -0800
committerjohansen <none@none>2006-12-19 23:13:06 -0800
commitad23a2db4cfc94c0ed1d58554479ce8d2e7e5768 (patch)
tree0a4ed7a8ade1d77844ef5c2fd2b13b279e0f78d2 /usr/src/uts/common/vm/page_lock.c
parent2c40916dd1416413504de4d1054323f2d14dc6e0 (diff)
downloadillumos-joyent-ad23a2db4cfc94c0ed1d58554479ce8d2e7e5768.tar.gz
4894692 caching data in heap inflates crash dump
6499454 time to increase size of kmem default allocation caches 6499459 vm should stop checking kvp directly
Diffstat (limited to 'usr/src/uts/common/vm/page_lock.c')
-rw-r--r--usr/src/uts/common/vm/page_lock.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/usr/src/uts/common/vm/page_lock.c b/usr/src/uts/common/vm/page_lock.c
index a1c0b2e065..4dab7c8bc7 100644
--- a/usr/src/uts/common/vm/page_lock.c
+++ b/usr/src/uts/common/vm/page_lock.c
@@ -142,6 +142,12 @@ static pad_mutex_t pszc_mutex[PSZC_MTX_TABLE_SIZE];
extern struct vnode kvp;
+/*
+ * Two slots after VPH_TABLE_SIZE are reserved in vph_mutex for kernel vnodes.
+ * The lock for kvp is VPH_TABLE_SIZE + 0, and the lock for zvp is
+ * VPH_TABLE_SIZE + 1.
+ */
+
kmutex_t vph_mutex[VPH_TABLE_SIZE + 2];
/*
@@ -861,6 +867,9 @@ page_vnode_mutex(vnode_t *vp)
{
if (vp == &kvp)
return (&vph_mutex[VPH_TABLE_SIZE + 0]);
+
+ if (vp == &zvp)
+ return (&vph_mutex[VPH_TABLE_SIZE + 1]);
#ifdef DEBUG
if (page_vnode_mutex_stress != 0)
return (&vph_mutex[0]);
@@ -913,7 +922,7 @@ page_szc_lock(page_t *pp)
ASSERT(!PP_ISFREE(pp));
ASSERT(pp->p_vnode != NULL);
ASSERT(!IS_SWAPFSVP(pp->p_vnode));
- ASSERT(pp->p_vnode != &kvp);
+ ASSERT(!PP_ISKAS(pp));
again:
if (pszc == 0) {