svn commit: r247031 - in user/attilio/vmobj-rwlock/sys: cddl/contrib/opensolaris/uts/common/fs/zfs compat/linprocfs dev/agp dev/drm2/i915 dev/hwpmc dev/md fs/fuse fs/nfsclient fs/nfsserver fs/procf...

Attilio Rao attilio at FreeBSD.org
Wed Feb 20 12:03:24 UTC 2013


Author: attilio
Date: Wed Feb 20 12:03:20 2013
New Revision: 247031
URL: http://svnweb.freebsd.org/changeset/base/247031

Log:
  Rename VM_OBJECT_LOCK(), VM_OBJECT_UNLOCK() and VM_OBJECT_TRYLOCK() to
  their "write" versions.
  
  Sponsored by:	EMC / Isilon storage division

Modified:
  user/attilio/vmobj-rwlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  user/attilio/vmobj-rwlock/sys/compat/linprocfs/linprocfs.c
  user/attilio/vmobj-rwlock/sys/dev/agp/agp.c
  user/attilio/vmobj-rwlock/sys/dev/agp/agp_i810.c
  user/attilio/vmobj-rwlock/sys/dev/drm2/i915/i915_gem.c
  user/attilio/vmobj-rwlock/sys/dev/hwpmc/hwpmc_mod.c
  user/attilio/vmobj-rwlock/sys/dev/md/md.c
  user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_io.c
  user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_vnops.c
  user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clbio.c
  user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clnode.c
  user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvnops.c
  user/attilio/vmobj-rwlock/sys/fs/nfsserver/nfs_nfsdport.c
  user/attilio/vmobj-rwlock/sys/fs/procfs/procfs_map.c
  user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_subr.c
  user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_vnops.c
  user/attilio/vmobj-rwlock/sys/kern/imgact_elf.c
  user/attilio/vmobj-rwlock/sys/kern/kern_exec.c
  user/attilio/vmobj-rwlock/sys/kern/kern_proc.c
  user/attilio/vmobj-rwlock/sys/kern/kern_sharedpage.c
  user/attilio/vmobj-rwlock/sys/kern/subr_uio.c
  user/attilio/vmobj-rwlock/sys/kern/sys_process.c
  user/attilio/vmobj-rwlock/sys/kern/sysv_shm.c
  user/attilio/vmobj-rwlock/sys/kern/uipc_shm.c
  user/attilio/vmobj-rwlock/sys/kern/uipc_syscalls.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_aio.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_bio.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_cluster.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_default.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_subr.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_syscalls.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_vnops.c
  user/attilio/vmobj-rwlock/sys/nfsclient/nfs_bio.c
  user/attilio/vmobj-rwlock/sys/nfsclient/nfs_vnops.c
  user/attilio/vmobj-rwlock/sys/nfsserver/nfs_serv.c
  user/attilio/vmobj-rwlock/sys/ofed/drivers/infiniband/core/umem.c
  user/attilio/vmobj-rwlock/sys/security/mac/mac_process.c
  user/attilio/vmobj-rwlock/sys/sparc64/sparc64/pmap.c
  user/attilio/vmobj-rwlock/sys/ufs/ffs/ffs_rawread.c
  user/attilio/vmobj-rwlock/sys/ufs/ffs/ffs_vnops.c
  user/attilio/vmobj-rwlock/sys/vm/default_pager.c
  user/attilio/vmobj-rwlock/sys/vm/device_pager.c
  user/attilio/vmobj-rwlock/sys/vm/phys_pager.c
  user/attilio/vmobj-rwlock/sys/vm/sg_pager.c
  user/attilio/vmobj-rwlock/sys/vm/swap_pager.c
  user/attilio/vmobj-rwlock/sys/vm/uma_core.c
  user/attilio/vmobj-rwlock/sys/vm/vm_fault.c
  user/attilio/vmobj-rwlock/sys/vm/vm_glue.c
  user/attilio/vmobj-rwlock/sys/vm/vm_kern.c
  user/attilio/vmobj-rwlock/sys/vm/vm_map.c
  user/attilio/vmobj-rwlock/sys/vm/vm_meter.c
  user/attilio/vmobj-rwlock/sys/vm/vm_mmap.c
  user/attilio/vmobj-rwlock/sys/vm/vm_object.c
  user/attilio/vmobj-rwlock/sys/vm/vm_object.h
  user/attilio/vmobj-rwlock/sys/vm/vm_page.c
  user/attilio/vmobj-rwlock/sys/vm/vm_pageout.c
  user/attilio/vmobj-rwlock/sys/vm/vm_pager.c
  user/attilio/vmobj-rwlock/sys/vm/vnode_pager.c

Modified: user/attilio/vmobj-rwlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -450,7 +450,7 @@ update_pages(vnode_t *vp, int64_t start,
 	ASSERT(obj != NULL);
 
 	off = start & PAGEOFFSET;
-	VM_OBJECT_LOCK(obj);
+	VM_OBJECT_WLOCK(obj);
 	for (start &= PAGEMASK; len > 0; start += PAGESIZE) {
 		vm_page_t pp;
 		int nbytes = imin(PAGESIZE - off, len);
@@ -467,23 +467,23 @@ update_pages(vnode_t *vp, int64_t start,
 			    ("zfs update_pages: unbusy page in putpages case"));
 			KASSERT(!pmap_page_is_write_mapped(pp),
 			    ("zfs update_pages: writable page in putpages case"));
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 
 			va = zfs_map_page(pp, &sf);
 			(void) dmu_write(os, oid, start, nbytes, va, tx);
 			zfs_unmap_page(sf);
 
-			VM_OBJECT_LOCK(obj);
+			VM_OBJECT_WLOCK(obj);
 			vm_page_undirty(pp);
 		} else if ((pp = page_busy(vp, start, off, nbytes)) != NULL) {
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 
 			va = zfs_map_page(pp, &sf);
 			(void) dmu_read(os, oid, start+off, nbytes,
 			    va+off, DMU_READ_PREFETCH);;
 			zfs_unmap_page(sf);
 
-			VM_OBJECT_LOCK(obj);
+			VM_OBJECT_WLOCK(obj);
 			page_unbusy(pp);
 		}
 		len -= nbytes;
@@ -491,7 +491,7 @@ update_pages(vnode_t *vp, int64_t start,
 	}
 	if (segflg != UIO_NOCOPY)
 		vm_object_pip_wakeupn(obj, 0);
-	VM_OBJECT_UNLOCK(obj);
+	VM_OBJECT_WUNLOCK(obj);
 }
 
 /*
@@ -523,7 +523,7 @@ mappedread_sf(vnode_t *vp, int nbytes, u
 	ASSERT(obj != NULL);
 	ASSERT((uio->uio_loffset & PAGEOFFSET) == 0);
 
-	VM_OBJECT_LOCK(obj);
+	VM_OBJECT_WLOCK(obj);
 	for (start = uio->uio_loffset; len > 0; start += PAGESIZE) {
 		int bytes = MIN(PAGESIZE, len);
 
@@ -531,14 +531,14 @@ mappedread_sf(vnode_t *vp, int nbytes, u
 		    VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_IGN_SBUSY);
 		if (pp->valid == 0) {
 			vm_page_io_start(pp);
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 			va = zfs_map_page(pp, &sf);
 			error = dmu_read(os, zp->z_id, start, bytes, va,
 			    DMU_READ_PREFETCH);
 			if (bytes != PAGESIZE && error == 0)
 				bzero(va + bytes, PAGESIZE - bytes);
 			zfs_unmap_page(sf);
-			VM_OBJECT_LOCK(obj);
+			VM_OBJECT_WLOCK(obj);
 			vm_page_io_finish(pp);
 			vm_page_lock(pp);
 			if (error) {
@@ -555,7 +555,7 @@ mappedread_sf(vnode_t *vp, int nbytes, u
 		uio->uio_offset += bytes;
 		len -= bytes;
 	}
-	VM_OBJECT_UNLOCK(obj);
+	VM_OBJECT_WUNLOCK(obj);
 	return (error);
 }
 
@@ -587,7 +587,7 @@ mappedread(vnode_t *vp, int nbytes, uio_
 
 	start = uio->uio_loffset;
 	off = start & PAGEOFFSET;
-	VM_OBJECT_LOCK(obj);
+	VM_OBJECT_WLOCK(obj);
 	for (start &= PAGEMASK; len > 0; start += PAGESIZE) {
 		vm_page_t pp;
 		uint64_t bytes = MIN(PAGESIZE - off, len);
@@ -596,23 +596,23 @@ mappedread(vnode_t *vp, int nbytes, uio_
 			struct sf_buf *sf;
 			caddr_t va;
 
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 			va = zfs_map_page(pp, &sf);
 			error = uiomove(va + off, bytes, UIO_READ, uio);
 			zfs_unmap_page(sf);
-			VM_OBJECT_LOCK(obj);
+			VM_OBJECT_WLOCK(obj);
 			page_unhold(pp);
 		} else {
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 			error = dmu_read_uio(os, zp->z_id, uio, bytes);
-			VM_OBJECT_LOCK(obj);
+			VM_OBJECT_WLOCK(obj);
 		}
 		len -= bytes;
 		off = 0;
 		if (error)
 			break;
 	}
-	VM_OBJECT_UNLOCK(obj);
+	VM_OBJECT_WUNLOCK(obj);
 	return (error);
 }
 
@@ -5683,7 +5683,7 @@ zfs_getpages(struct vnode *vp, vm_page_t
 	mfirst = m[reqstart];
 	mlast = m[reqstart + reqsize - 1];
 
-	VM_OBJECT_LOCK(object);
+	VM_OBJECT_WLOCK(object);
 
 	for (i = 0; i < reqstart; i++) {
 		vm_page_lock(m[i]);
@@ -5699,7 +5699,7 @@ zfs_getpages(struct vnode *vp, vm_page_t
 	if (mreq->valid && reqsize == 1) {
 		if (mreq->valid != VM_PAGE_BITS_ALL)
 			vm_page_zero_invalid(mreq, TRUE);
-		VM_OBJECT_UNLOCK(object);
+		VM_OBJECT_WUNLOCK(object);
 		ZFS_EXIT(zfsvfs);
 		return (VM_PAGER_OK);
 	}
@@ -5715,7 +5715,7 @@ zfs_getpages(struct vnode *vp, vm_page_t
 				vm_page_unlock(m[i]);
 			}
 		}
-		VM_OBJECT_UNLOCK(object);
+		VM_OBJECT_WUNLOCK(object);
 		ZFS_EXIT(zfsvfs);
 		return (VM_PAGER_BAD);
 	}
@@ -5724,7 +5724,7 @@ zfs_getpages(struct vnode *vp, vm_page_t
 	if (IDX_TO_OFF(mlast->pindex) + lsize > object->un_pager.vnp.vnp_size)
 		lsize = object->un_pager.vnp.vnp_size - IDX_TO_OFF(mlast->pindex);
 
-	VM_OBJECT_UNLOCK(object);
+	VM_OBJECT_WUNLOCK(object);
 
 	for (i = reqstart; i < reqstart + reqsize; i++) {
 		size = PAGE_SIZE;
@@ -5740,7 +5740,7 @@ zfs_getpages(struct vnode *vp, vm_page_t
 			break;
 	}
 
-	VM_OBJECT_LOCK(object);
+	VM_OBJECT_WLOCK(object);
 
 	for (i = reqstart; i < reqstart + reqsize; i++) {
 		if (!error)
@@ -5750,7 +5750,7 @@ zfs_getpages(struct vnode *vp, vm_page_t
 			vm_page_readahead_finish(m[i]);
 	}
 
-	VM_OBJECT_UNLOCK(object);
+	VM_OBJECT_WUNLOCK(object);
 
 	ZFS_ACCESSTIME_STAMP(zfsvfs, zp);
 	ZFS_EXIT(zfsvfs);

Modified: user/attilio/vmobj-rwlock/sys/compat/linprocfs/linprocfs.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/compat/linprocfs/linprocfs.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/compat/linprocfs/linprocfs.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -1033,9 +1033,9 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
 		e_end = entry->end;
 		obj = entry->object.vm_object;
 		for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) {
-			VM_OBJECT_LOCK(tobj);
+			VM_OBJECT_WLOCK(tobj);
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
+				VM_OBJECT_WUNLOCK(lobj);
 			lobj = tobj;
 		}
 		last_timestamp = map->timestamp;
@@ -1051,11 +1051,11 @@ linprocfs_doprocmaps(PFS_FILL_ARGS)
 			else
 				vp = NULL;
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
+				VM_OBJECT_WUNLOCK(lobj);
 			flags = obj->flags;
 			ref_count = obj->ref_count;
 			shadow_count = obj->shadow_count;
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 			if (vp) {
 				vn_fullpath(td, vp, &name, &freename);
 				vn_lock(vp, LK_SHARED | LK_RETRY);

Modified: user/attilio/vmobj-rwlock/sys/dev/agp/agp.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/agp/agp.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/dev/agp/agp.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -545,7 +545,7 @@ agp_generic_bind_memory(device_t dev, st
 	 * because vm_page_grab() may sleep and we can't hold a mutex
 	 * while sleeping.
 	 */
-	VM_OBJECT_LOCK(mem->am_obj);
+	VM_OBJECT_WLOCK(mem->am_obj);
 	for (i = 0; i < mem->am_size; i += PAGE_SIZE) {
 		/*
 		 * Find a page from the object and wire it
@@ -558,14 +558,14 @@ agp_generic_bind_memory(device_t dev, st
 		    VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_RETRY);
 		AGP_DPF("found page pa=%#jx\n", (uintmax_t)VM_PAGE_TO_PHYS(m));
 	}
-	VM_OBJECT_UNLOCK(mem->am_obj);
+	VM_OBJECT_WUNLOCK(mem->am_obj);
 
 	mtx_lock(&sc->as_lock);
 
 	if (mem->am_is_bound) {
 		device_printf(dev, "memory already bound\n");
 		error = EINVAL;
-		VM_OBJECT_LOCK(mem->am_obj);
+		VM_OBJECT_WLOCK(mem->am_obj);
 		i = 0;
 		goto bad;
 	}
@@ -574,7 +574,7 @@ agp_generic_bind_memory(device_t dev, st
 	 * Bind the individual pages and flush the chipset's
 	 * TLB.
 	 */
-	VM_OBJECT_LOCK(mem->am_obj);
+	VM_OBJECT_WLOCK(mem->am_obj);
 	for (i = 0; i < mem->am_size; i += PAGE_SIZE) {
 		m = vm_page_lookup(mem->am_obj, OFF_TO_IDX(i));
 
@@ -602,7 +602,7 @@ agp_generic_bind_memory(device_t dev, st
 		}
 		vm_page_wakeup(m);
 	}
-	VM_OBJECT_UNLOCK(mem->am_obj);
+	VM_OBJECT_WUNLOCK(mem->am_obj);
 
 	/*
 	 * Flush the cpu cache since we are providing a new mapping
@@ -632,7 +632,7 @@ bad:
 		vm_page_unwire(m, 0);
 		vm_page_unlock(m);
 	}
-	VM_OBJECT_UNLOCK(mem->am_obj);
+	VM_OBJECT_WUNLOCK(mem->am_obj);
 
 	return error;
 }
@@ -659,14 +659,14 @@ agp_generic_unbind_memory(device_t dev, 
 	 */
 	for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE)
 		AGP_UNBIND_PAGE(dev, mem->am_offset + i);
-	VM_OBJECT_LOCK(mem->am_obj);
+	VM_OBJECT_WLOCK(mem->am_obj);
 	for (i = 0; i < mem->am_size; i += PAGE_SIZE) {
 		m = vm_page_lookup(mem->am_obj, atop(i));
 		vm_page_lock(m);
 		vm_page_unwire(m, 0);
 		vm_page_unlock(m);
 	}
-	VM_OBJECT_UNLOCK(mem->am_obj);
+	VM_OBJECT_WUNLOCK(mem->am_obj);
 		
 	agp_flush_cache();
 	AGP_FLUSH_TLB(dev);

Modified: user/attilio/vmobj-rwlock/sys/dev/agp/agp_i810.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/agp/agp_i810.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/dev/agp/agp_i810.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -1968,10 +1968,10 @@ agp_i810_alloc_memory(device_t dev, int 
 			 * Allocate and wire down the page now so that we can
 			 * get its physical address.
 			 */
-			VM_OBJECT_LOCK(mem->am_obj);
+			VM_OBJECT_WLOCK(mem->am_obj);
 			m = vm_page_grab(mem->am_obj, 0, VM_ALLOC_NOBUSY |
 			    VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_RETRY);
-			VM_OBJECT_UNLOCK(mem->am_obj);
+			VM_OBJECT_WUNLOCK(mem->am_obj);
 			mem->am_physical = VM_PAGE_TO_PHYS(m);
 		} else {
 			/* Our allocation is already nicely wired down for us.
@@ -2006,12 +2006,12 @@ agp_i810_free_memory(device_t dev, struc
 			/*
 			 * Unwire the page which we wired in alloc_memory.
 			 */
-			VM_OBJECT_LOCK(mem->am_obj);
+			VM_OBJECT_WLOCK(mem->am_obj);
 			m = vm_page_lookup(mem->am_obj, 0);
 			vm_page_lock(m);
 			vm_page_unwire(m, 0);
 			vm_page_unlock(m);
-			VM_OBJECT_UNLOCK(mem->am_obj);
+			VM_OBJECT_WUNLOCK(mem->am_obj);
 		} else {
 			contigfree(sc->argb_cursor, mem->am_size, M_AGP);
 			sc->argb_cursor = NULL;

Modified: user/attilio/vmobj-rwlock/sys/dev/drm2/i915/i915_gem.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/drm2/i915/i915_gem.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/dev/drm2/i915/i915_gem.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -990,14 +990,14 @@ i915_gem_swap_io(struct drm_device *dev,
 	vm_obj = obj->base.vm_obj;
 	ret = 0;
 
-	VM_OBJECT_LOCK(vm_obj);
+	VM_OBJECT_WLOCK(vm_obj);
 	vm_object_pip_add(vm_obj, 1);
 	while (size > 0) {
 		obj_pi = OFF_TO_IDX(offset);
 		obj_po = offset & PAGE_MASK;
 
 		m = i915_gem_wire_page(vm_obj, obj_pi);
-		VM_OBJECT_UNLOCK(vm_obj);
+		VM_OBJECT_WUNLOCK(vm_obj);
 
 		sched_pin();
 		sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
@@ -1031,7 +1031,7 @@ i915_gem_swap_io(struct drm_device *dev,
 		}
 		sf_buf_free(sf);
 		sched_unpin();
-		VM_OBJECT_LOCK(vm_obj);
+		VM_OBJECT_WLOCK(vm_obj);
 		if (rw == UIO_WRITE)
 			vm_page_dirty(m);
 		vm_page_reference(m);
@@ -1044,7 +1044,7 @@ i915_gem_swap_io(struct drm_device *dev,
 			break;
 	}
 	vm_object_pip_wakeup(vm_obj);
-	VM_OBJECT_UNLOCK(vm_obj);
+	VM_OBJECT_WUNLOCK(vm_obj);
 
 	return (ret);
 }
@@ -1357,7 +1357,7 @@ i915_gem_pager_fault(vm_object_t vm_obj,
 	} else
 		oldm = NULL;
 retry:
-	VM_OBJECT_UNLOCK(vm_obj);
+	VM_OBJECT_WUNLOCK(vm_obj);
 unlocked_vmobj:
 	cause = ret = 0;
 	m = NULL;
@@ -1407,7 +1407,7 @@ unlocked_vmobj:
 		list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list);
 
 	obj->fault_mappable = true;
-	VM_OBJECT_LOCK(vm_obj);
+	VM_OBJECT_WLOCK(vm_obj);
 	m = vm_phys_fictitious_to_vm_page(dev->agp->base + obj->gtt_offset +
 	    offset);
 	if (m == NULL) {
@@ -1452,7 +1452,7 @@ out:
 		kern_yield(PRI_USER);
 		goto unlocked_vmobj;
 	}
-	VM_OBJECT_LOCK(vm_obj);
+	VM_OBJECT_WLOCK(vm_obj);
 	vm_object_pip_wakeup(vm_obj);
 	return (VM_PAGER_ERROR);
 }
@@ -2208,12 +2208,12 @@ i915_gem_object_get_pages_gtt(struct drm
 	obj->pages = malloc(page_count * sizeof(vm_page_t), DRM_I915_GEM,
 	    M_WAITOK);
 	vm_obj = obj->base.vm_obj;
-	VM_OBJECT_LOCK(vm_obj);
+	VM_OBJECT_WLOCK(vm_obj);
 	for (i = 0; i < page_count; i++) {
 		if ((obj->pages[i] = i915_gem_wire_page(vm_obj, i)) == NULL)
 			goto failed;
 	}
-	VM_OBJECT_UNLOCK(vm_obj);
+	VM_OBJECT_WUNLOCK(vm_obj);
 	if (i915_gem_object_needs_bit17_swizzle(obj))
 		i915_gem_object_do_bit_17_swizzle(obj);
 	return (0);
@@ -2226,7 +2226,7 @@ failed:
 		vm_page_unlock(m);
 		atomic_add_long(&i915_gem_wired_pages_cnt, -1);
 	}
-	VM_OBJECT_UNLOCK(vm_obj);
+	VM_OBJECT_WUNLOCK(vm_obj);
 	free(obj->pages, DRM_I915_GEM);
 	obj->pages = NULL;
 	return (-EIO);
@@ -2272,7 +2272,7 @@ i915_gem_object_put_pages_gtt(struct drm
 	if (obj->madv == I915_MADV_DONTNEED)
 		obj->dirty = 0;
 	page_count = obj->base.size / PAGE_SIZE;
-	VM_OBJECT_LOCK(obj->base.vm_obj);
+	VM_OBJECT_WLOCK(obj->base.vm_obj);
 #if GEM_PARANOID_CHECK_GTT
 	i915_gem_assert_pages_not_mapped(obj->base.dev, obj->pages, page_count);
 #endif
@@ -2287,7 +2287,7 @@ i915_gem_object_put_pages_gtt(struct drm
 		vm_page_unlock(m);
 		atomic_add_long(&i915_gem_wired_pages_cnt, -1);
 	}
-	VM_OBJECT_UNLOCK(obj->base.vm_obj);
+	VM_OBJECT_WUNLOCK(obj->base.vm_obj);
 	obj->dirty = 0;
 	free(obj->pages, DRM_I915_GEM);
 	obj->pages = NULL;
@@ -2309,7 +2309,7 @@ i915_gem_release_mmap(struct drm_i915_ge
 	if (devobj != NULL) {
 		page_count = OFF_TO_IDX(obj->base.size);
 
-		VM_OBJECT_LOCK(devobj);
+		VM_OBJECT_WLOCK(devobj);
 retry:
 		for (i = 0; i < page_count; i++) {
 			m = vm_page_lookup(devobj, i);
@@ -2319,7 +2319,7 @@ retry:
 				goto retry;
 			cdev_pager_free_page(devobj, m);
 		}
-		VM_OBJECT_UNLOCK(devobj);
+		VM_OBJECT_WUNLOCK(devobj);
 		vm_object_deallocate(devobj);
 	}
 
@@ -2437,9 +2437,9 @@ i915_gem_object_truncate(struct drm_i915
 	vm_object_t vm_obj;
 
 	vm_obj = obj->base.vm_obj;
-	VM_OBJECT_LOCK(vm_obj);
+	VM_OBJECT_WLOCK(vm_obj);
 	vm_object_page_remove(vm_obj, 0, 0, false);
-	VM_OBJECT_UNLOCK(vm_obj);
+	VM_OBJECT_WUNLOCK(vm_obj);
 	obj->madv = I915_MADV_PURGED_INTERNAL;
 }
 
@@ -3567,13 +3567,13 @@ i915_gem_detach_phys_object(struct drm_d
 	vaddr = obj->phys_obj->handle->vaddr;
 
 	page_count = obj->base.size / PAGE_SIZE;
-	VM_OBJECT_LOCK(obj->base.vm_obj);
+	VM_OBJECT_WLOCK(obj->base.vm_obj);
 	for (i = 0; i < page_count; i++) {
 		m = i915_gem_wire_page(obj->base.vm_obj, i);
 		if (m == NULL)
 			continue; /* XXX */
 
-		VM_OBJECT_UNLOCK(obj->base.vm_obj);
+		VM_OBJECT_WUNLOCK(obj->base.vm_obj);
 		sf = sf_buf_alloc(m, 0);
 		if (sf != NULL) {
 			dst = (char *)sf_buf_kva(sf);
@@ -3582,7 +3582,7 @@ i915_gem_detach_phys_object(struct drm_d
 		}
 		drm_clflush_pages(&m, 1);
 
-		VM_OBJECT_LOCK(obj->base.vm_obj);
+		VM_OBJECT_WLOCK(obj->base.vm_obj);
 		vm_page_reference(m);
 		vm_page_lock(m);
 		vm_page_dirty(m);
@@ -3590,7 +3590,7 @@ i915_gem_detach_phys_object(struct drm_d
 		vm_page_unlock(m);
 		atomic_add_long(&i915_gem_wired_pages_cnt, -1);
 	}
-	VM_OBJECT_UNLOCK(obj->base.vm_obj);
+	VM_OBJECT_WUNLOCK(obj->base.vm_obj);
 	intel_gtt_chipset_flush();
 
 	obj->phys_obj->cur_obj = NULL;
@@ -3632,7 +3632,7 @@ i915_gem_attach_phys_object(struct drm_d
 
 	page_count = obj->base.size / PAGE_SIZE;
 
-	VM_OBJECT_LOCK(obj->base.vm_obj);
+	VM_OBJECT_WLOCK(obj->base.vm_obj);
 	ret = 0;
 	for (i = 0; i < page_count; i++) {
 		m = i915_gem_wire_page(obj->base.vm_obj, i);
@@ -3640,14 +3640,14 @@ i915_gem_attach_phys_object(struct drm_d
 			ret = -EIO;
 			break;
 		}
-		VM_OBJECT_UNLOCK(obj->base.vm_obj);
+		VM_OBJECT_WUNLOCK(obj->base.vm_obj);
 		sf = sf_buf_alloc(m, 0);
 		src = (char *)sf_buf_kva(sf);
 		dst = (char *)obj->phys_obj->handle->vaddr + IDX_TO_OFF(i);
 		memcpy(dst, src, PAGE_SIZE);
 		sf_buf_free(sf);
 
-		VM_OBJECT_LOCK(obj->base.vm_obj);
+		VM_OBJECT_WLOCK(obj->base.vm_obj);
 
 		vm_page_reference(m);
 		vm_page_lock(m);
@@ -3655,7 +3655,7 @@ i915_gem_attach_phys_object(struct drm_d
 		vm_page_unlock(m);
 		atomic_add_long(&i915_gem_wired_pages_cnt, -1);
 	}
-	VM_OBJECT_UNLOCK(obj->base.vm_obj);
+	VM_OBJECT_WUNLOCK(obj->base.vm_obj);
 
 	return (0);
 }

Modified: user/attilio/vmobj-rwlock/sys/dev/hwpmc/hwpmc_mod.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/hwpmc/hwpmc_mod.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/dev/hwpmc/hwpmc_mod.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -1672,7 +1672,7 @@ pmc_log_process_mappings(struct pmc_owne
 		}
 
 		obj = entry->object.vm_object;
-		VM_OBJECT_LOCK(obj);
+		VM_OBJECT_WLOCK(obj);
 
 		/* 
 		 * Walk the backing_object list to find the base
@@ -1680,9 +1680,9 @@ pmc_log_process_mappings(struct pmc_owne
 		 */
 		for (lobj = tobj = obj; tobj != NULL; tobj = tobj->backing_object) {
 			if (tobj != obj)
-				VM_OBJECT_LOCK(tobj);
+				VM_OBJECT_WLOCK(tobj);
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
+				VM_OBJECT_WUNLOCK(lobj);
 			lobj = tobj;
 		}
 
@@ -1692,14 +1692,14 @@ pmc_log_process_mappings(struct pmc_owne
 		if (lobj == NULL) {
 			PMCDBG(LOG,OPS,2, "hwpmc: lobj unexpectedly NULL! pid=%d "
 			    "vm_map=%p vm_obj=%p\n", p->p_pid, map, obj);
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 			continue;
 		}
 
 		if (lobj->type != OBJT_VNODE || lobj->handle == NULL) {
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
-			VM_OBJECT_UNLOCK(obj);
+				VM_OBJECT_WUNLOCK(lobj);
+			VM_OBJECT_WUNLOCK(obj);
 			continue;
 		}
 
@@ -1711,8 +1711,8 @@ pmc_log_process_mappings(struct pmc_owne
 		if (entry->start == last_end && lobj->handle == last_vp) {
 			last_end = entry->end;
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
-			VM_OBJECT_UNLOCK(obj);
+				VM_OBJECT_WUNLOCK(lobj);
+			VM_OBJECT_WUNLOCK(obj);
 			continue;
 		}
 
@@ -1734,9 +1734,9 @@ pmc_log_process_mappings(struct pmc_owne
 		vp = lobj->handle;
 		vref(vp);
 		if (lobj != obj)
-			VM_OBJECT_UNLOCK(lobj);
+			VM_OBJECT_WUNLOCK(lobj);
 
-		VM_OBJECT_UNLOCK(obj);
+		VM_OBJECT_WUNLOCK(obj);
 
 		freepath = NULL;
 		pmc_getfilename(vp, &fullpath, &freepath);

Modified: user/attilio/vmobj-rwlock/sys/dev/md/md.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/md/md.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/dev/md/md.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -658,17 +658,17 @@ mdstart_swap(struct md_s *sc, struct bio
 	lastend = (bp->bio_offset + bp->bio_length - 1) % PAGE_SIZE + 1;
 
 	rv = VM_PAGER_OK;
-	VM_OBJECT_LOCK(sc->object);
+	VM_OBJECT_WLOCK(sc->object);
 	vm_object_pip_add(sc->object, 1);
 	for (i = bp->bio_offset / PAGE_SIZE; i <= lastp; i++) {
 		len = ((i == lastp) ? lastend : PAGE_SIZE) - offs;
 
 		m = vm_page_grab(sc->object, i,
 		    VM_ALLOC_NORMAL|VM_ALLOC_RETRY);
-		VM_OBJECT_UNLOCK(sc->object);
+		VM_OBJECT_WUNLOCK(sc->object);
 		sched_pin();
 		sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
-		VM_OBJECT_LOCK(sc->object);
+		VM_OBJECT_WLOCK(sc->object);
 		if (bp->bio_cmd == BIO_READ) {
 			if (m->valid != VM_PAGE_BITS_ALL)
 				rv = vm_pager_get_pages(sc->object, &m, 1, 0);
@@ -733,7 +733,7 @@ mdstart_swap(struct md_s *sc, struct bio
 		offs = 0;
 	}
 	vm_object_pip_subtract(sc->object, 1);
-	VM_OBJECT_UNLOCK(sc->object);
+	VM_OBJECT_WUNLOCK(sc->object);
 	return (rv != VM_PAGER_ERROR ? 0 : ENOSPC);
 }
 
@@ -1069,7 +1069,7 @@ mdresize(struct md_s *sc, struct md_ioct
 		oldpages = OFF_TO_IDX(round_page(sc->mediasize));
 		newpages = OFF_TO_IDX(round_page(mdio->md_mediasize));
 		if (newpages < oldpages) {
-			VM_OBJECT_LOCK(sc->object);
+			VM_OBJECT_WLOCK(sc->object);
 			vm_object_page_remove(sc->object, newpages, 0, 0);
 			swap_pager_freespace(sc->object, newpages,
 			    oldpages - newpages);
@@ -1077,7 +1077,7 @@ mdresize(struct md_s *sc, struct md_ioct
 			    newpages), sc->cred);
 			sc->object->charge = IDX_TO_OFF(newpages);
 			sc->object->size = newpages;
-			VM_OBJECT_UNLOCK(sc->object);
+			VM_OBJECT_WUNLOCK(sc->object);
 		} else if (newpages > oldpages) {
 			res = swap_reserve_by_cred(IDX_TO_OFF(newpages -
 			    oldpages), sc->cred);
@@ -1094,10 +1094,10 @@ mdresize(struct md_s *sc, struct md_ioct
 					return (EDOM);
 				}
 			}
-			VM_OBJECT_LOCK(sc->object);
+			VM_OBJECT_WLOCK(sc->object);
 			sc->object->charge = IDX_TO_OFF(newpages);
 			sc->object->size = newpages;
-			VM_OBJECT_UNLOCK(sc->object);
+			VM_OBJECT_WUNLOCK(sc->object);
 		}
 		break;
 	default:

Modified: user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_io.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_io.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_io.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -786,9 +786,9 @@ fuse_io_invalbuf(struct vnode *vp, struc
 	fvdat->flag |= FN_FLUSHINPROG;
 
 	if (vp->v_bufobj.bo_object != NULL) {
-		VM_OBJECT_LOCK(vp->v_bufobj.bo_object);
+		VM_OBJECT_WLOCK(vp->v_bufobj.bo_object);
 		vm_object_page_clean(vp->v_bufobj.bo_object, 0, 0, OBJPC_SYNC);
-		VM_OBJECT_UNLOCK(vp->v_bufobj.bo_object);
+		VM_OBJECT_WUNLOCK(vp->v_bufobj.bo_object);
 	}
 	error = vinvalbuf(vp, V_SAVE, PCATCH, 0);
 	while (error) {

Modified: user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_vnops.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_vnops.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/fuse/fuse_vnops.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -1758,7 +1758,7 @@ fuse_vnop_getpages(struct vop_getpages_a
 	 * can only occur at the file EOF.
 	 */
 
-	VM_OBJECT_LOCK(vp->v_object);
+	VM_OBJECT_WLOCK(vp->v_object);
 	fuse_vm_page_lock_queues();
 	if (pages[ap->a_reqpage]->valid != 0) {
 		for (i = 0; i < npages; ++i) {
@@ -1769,11 +1769,11 @@ fuse_vnop_getpages(struct vop_getpages_a
 			}
 		}
 		fuse_vm_page_unlock_queues();
-		VM_OBJECT_UNLOCK(vp->v_object);
+		VM_OBJECT_WUNLOCK(vp->v_object);
 		return 0;
 	}
 	fuse_vm_page_unlock_queues();
-	VM_OBJECT_UNLOCK(vp->v_object);
+	VM_OBJECT_WUNLOCK(vp->v_object);
 
 	/*
 	 * We use only the kva address for the buffer, but this is extremely
@@ -1803,7 +1803,7 @@ fuse_vnop_getpages(struct vop_getpages_a
 
 	if (error && (uio.uio_resid == count)) {
 		FS_DEBUG("error %d\n", error);
-		VM_OBJECT_LOCK(vp->v_object);
+		VM_OBJECT_WLOCK(vp->v_object);
 		fuse_vm_page_lock_queues();
 		for (i = 0; i < npages; ++i) {
 			if (i != ap->a_reqpage) {
@@ -1813,7 +1813,7 @@ fuse_vnop_getpages(struct vop_getpages_a
 			}
 		}
 		fuse_vm_page_unlock_queues();
-		VM_OBJECT_UNLOCK(vp->v_object);
+		VM_OBJECT_WUNLOCK(vp->v_object);
 		return VM_PAGER_ERROR;
 	}
 	/*
@@ -1823,7 +1823,7 @@ fuse_vnop_getpages(struct vop_getpages_a
 	 */
 
 	size = count - uio.uio_resid;
-	VM_OBJECT_LOCK(vp->v_object);
+	VM_OBJECT_WLOCK(vp->v_object);
 	fuse_vm_page_lock_queues();
 	for (i = 0, toff = 0; i < npages; i++, toff = nextoff) {
 		vm_page_t m;
@@ -1886,7 +1886,7 @@ fuse_vnop_getpages(struct vop_getpages_a
 		}
 	}
 	fuse_vm_page_unlock_queues();
-	VM_OBJECT_UNLOCK(vp->v_object);
+	VM_OBJECT_WUNLOCK(vp->v_object);
 	return 0;
 }
 
@@ -1975,9 +1975,9 @@ fuse_vnop_putpages(struct vop_putpages_a
 
 		for (i = 0; i < nwritten; i++) {
 			rtvals[i] = VM_PAGER_OK;
-			VM_OBJECT_LOCK(pages[i]->object);
+			VM_OBJECT_WLOCK(pages[i]->object);
 			vm_page_undirty(pages[i]);
-			VM_OBJECT_UNLOCK(pages[i]->object);
+			VM_OBJECT_WUNLOCK(pages[i]->object);
 		}
 	}
 	return rtvals[0];

Modified: user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clbio.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clbio.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clbio.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -135,7 +135,7 @@ ncl_getpages(struct vop_getpages_args *a
 	 * allow the pager to zero-out the blanks.  Partially valid pages
 	 * can only occur at the file EOF.
 	 */
-	VM_OBJECT_LOCK(object);
+	VM_OBJECT_WLOCK(object);
 	if (pages[ap->a_reqpage]->valid != 0) {
 		for (i = 0; i < npages; ++i) {
 			if (i != ap->a_reqpage) {
@@ -144,10 +144,10 @@ ncl_getpages(struct vop_getpages_args *a
 				vm_page_unlock(pages[i]);
 			}
 		}
-		VM_OBJECT_UNLOCK(object);
+		VM_OBJECT_WUNLOCK(object);
 		return (0);
 	}
-	VM_OBJECT_UNLOCK(object);
+	VM_OBJECT_WUNLOCK(object);
 
 	/*
 	 * We use only the kva address for the buffer, but this is extremely
@@ -177,7 +177,7 @@ ncl_getpages(struct vop_getpages_args *a
 
 	if (error && (uio.uio_resid == count)) {
 		ncl_printf("nfs_getpages: error %d\n", error);
-		VM_OBJECT_LOCK(object);
+		VM_OBJECT_WLOCK(object);
 		for (i = 0; i < npages; ++i) {
 			if (i != ap->a_reqpage) {
 				vm_page_lock(pages[i]);
@@ -185,7 +185,7 @@ ncl_getpages(struct vop_getpages_args *a
 				vm_page_unlock(pages[i]);
 			}
 		}
-		VM_OBJECT_UNLOCK(object);
+		VM_OBJECT_WUNLOCK(object);
 		return (VM_PAGER_ERROR);
 	}
 
@@ -196,7 +196,7 @@ ncl_getpages(struct vop_getpages_args *a
 	 */
 
 	size = count - uio.uio_resid;
-	VM_OBJECT_LOCK(object);
+	VM_OBJECT_WLOCK(object);
 	for (i = 0, toff = 0; i < npages; i++, toff = nextoff) {
 		vm_page_t m;
 		nextoff = toff + PAGE_SIZE;
@@ -232,7 +232,7 @@ ncl_getpages(struct vop_getpages_args *a
 		if (i != ap->a_reqpage)
 			vm_page_readahead_finish(m);
 	}
-	VM_OBJECT_UNLOCK(object);
+	VM_OBJECT_WUNLOCK(object);
 	return (0);
 }
 
@@ -1354,9 +1354,9 @@ ncl_vinvalbuf(struct vnode *vp, int flag
 	 * Now, flush as required.
 	 */
 	if ((flags & V_SAVE) && (vp->v_bufobj.bo_object != NULL)) {
-		VM_OBJECT_LOCK(vp->v_bufobj.bo_object);
+		VM_OBJECT_WLOCK(vp->v_bufobj.bo_object);
 		vm_object_page_clean(vp->v_bufobj.bo_object, 0, 0, OBJPC_SYNC);
-		VM_OBJECT_UNLOCK(vp->v_bufobj.bo_object);
+		VM_OBJECT_WUNLOCK(vp->v_bufobj.bo_object);
 		/*
 		 * If the page clean was interrupted, fail the invalidation.
 		 * Not doing so, we run the risk of losing dirty pages in the 

Modified: user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clnode.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clnode.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clnode.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -216,10 +216,10 @@ ncl_inactive(struct vop_inactive_args *a
 		 * stateid is available for the writes.
 		 */
 		if (vp->v_object != NULL) {
-			VM_OBJECT_LOCK(vp->v_object);
+			VM_OBJECT_WLOCK(vp->v_object);
 			retv = vm_object_page_clean(vp->v_object, 0, 0,
 			    OBJPC_SYNC);
-			VM_OBJECT_UNLOCK(vp->v_object);
+			VM_OBJECT_WUNLOCK(vp->v_object);
 		} else
 			retv = TRUE;
 		if (retv == TRUE) {

Modified: user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvnops.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvnops.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvnops.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -697,9 +697,9 @@ nfs_close(struct vop_close_args *ap)
 	     * mmap'ed writes or via write().
 	     */
 	    if (nfs_clean_pages_on_close && vp->v_object) {
-		VM_OBJECT_LOCK(vp->v_object);
+		VM_OBJECT_WLOCK(vp->v_object);
 		vm_object_page_clean(vp->v_object, 0, 0, 0);
-		VM_OBJECT_UNLOCK(vp->v_object);
+		VM_OBJECT_WUNLOCK(vp->v_object);
 	    }
 	    mtx_lock(&np->n_mtx);
 	    if (np->n_flag & NMODIFIED) {

Modified: user/attilio/vmobj-rwlock/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/nfsserver/nfs_nfsdport.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/nfsserver/nfs_nfsdport.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -1267,9 +1267,9 @@ nfsvno_fsync(struct vnode *vp, u_int64_t
 		 */
 		if (vp->v_object &&
 		   (vp->v_object->flags & OBJ_MIGHTBEDIRTY)) {
-			VM_OBJECT_LOCK(vp->v_object);
+			VM_OBJECT_WLOCK(vp->v_object);
 			vm_object_page_clean(vp->v_object, 0, 0, OBJPC_SYNC);
-			VM_OBJECT_UNLOCK(vp->v_object);
+			VM_OBJECT_WUNLOCK(vp->v_object);
 		}
 		error = VOP_FSYNC(vp, MNT_WAIT, td);
 	} else {
@@ -1298,10 +1298,10 @@ nfsvno_fsync(struct vnode *vp, u_int64_t
 
 		if (vp->v_object &&
 		   (vp->v_object->flags & OBJ_MIGHTBEDIRTY)) {
-			VM_OBJECT_LOCK(vp->v_object);
+			VM_OBJECT_WLOCK(vp->v_object);
 			vm_object_page_clean(vp->v_object, off, off + cnt,
 			    OBJPC_SYNC);
-			VM_OBJECT_UNLOCK(vp->v_object);
+			VM_OBJECT_WUNLOCK(vp->v_object);
 		}
 
 		bo = &vp->v_bufobj;

Modified: user/attilio/vmobj-rwlock/sys/fs/procfs/procfs_map.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/procfs/procfs_map.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/procfs/procfs_map.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -132,7 +132,7 @@ procfs_doprocmap(PFS_FILL_ARGS)
 		privateresident = 0;
 		obj = entry->object.vm_object;
 		if (obj != NULL) {
-			VM_OBJECT_LOCK(obj);
+			VM_OBJECT_WLOCK(obj);
 			if (obj->shadow_count == 1)
 				privateresident = obj->resident_page_count;
 		}
@@ -148,9 +148,9 @@ procfs_doprocmap(PFS_FILL_ARGS)
 
 		for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) {
 			if (tobj != obj)
-				VM_OBJECT_LOCK(tobj);
+				VM_OBJECT_WLOCK(tobj);
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
+				VM_OBJECT_WUNLOCK(lobj);
 			lobj = tobj;
 		}
 		last_timestamp = map->timestamp;
@@ -181,12 +181,12 @@ procfs_doprocmap(PFS_FILL_ARGS)
 				break;
 			}
 			if (lobj != obj)
-				VM_OBJECT_UNLOCK(lobj);
+				VM_OBJECT_WUNLOCK(lobj);
 
 			flags = obj->flags;
 			ref_count = obj->ref_count;
 			shadow_count = obj->shadow_count;
-			VM_OBJECT_UNLOCK(obj);
+			VM_OBJECT_WUNLOCK(obj);
 			if (vp != NULL) {
 				vn_fullpath(td, vp, &fullpath, &freepath);
 				vrele(vp);

Modified: user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_subr.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_subr.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -1272,7 +1272,7 @@ tmpfs_reg_resize(struct vnode *vp, off_t
 	    tmpfs_pages_check_avail(tmp, newpages - oldpages) == 0)
 		return (ENOSPC);
 
-	VM_OBJECT_LOCK(uobj);
+	VM_OBJECT_WLOCK(uobj);
 	if (newsize < oldsize) {
 		/*
 		 * Zero the truncated part of the last page.
@@ -1292,9 +1292,9 @@ retry:
 			} else if (vm_pager_has_page(uobj, idx, NULL, NULL)) {
 				m = vm_page_alloc(uobj, idx, VM_ALLOC_NORMAL);
 				if (m == NULL) {
-					VM_OBJECT_UNLOCK(uobj);
+					VM_OBJECT_WUNLOCK(uobj);
 					VM_WAIT;
-					VM_OBJECT_LOCK(uobj);
+					VM_OBJECT_WLOCK(uobj);
 					goto retry;
 				} else if (m->valid != VM_PAGE_BITS_ALL) {
 					ma[0] = m;
@@ -1314,7 +1314,7 @@ retry:
 					if (ignerr)
 						m = NULL;
 					else {
-						VM_OBJECT_UNLOCK(uobj);
+						VM_OBJECT_WUNLOCK(uobj);
 						return (EIO);
 					}
 				}
@@ -1336,7 +1336,7 @@ retry:
 		}
 	}
 	uobj->size = newpages;
-	VM_OBJECT_UNLOCK(uobj);
+	VM_OBJECT_WUNLOCK(uobj);
 
 	TMPFS_LOCK(tmp);
 	tmp->tm_pages_used += (newpages - oldpages);

Modified: user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_vnops.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_vnops.c	Wed Feb 20 11:24:11 2013	(r247030)
+++ user/attilio/vmobj-rwlock/sys/fs/tmpfs/tmpfs_vnops.c	Wed Feb 20 12:03:20 2013	(r247031)
@@ -447,7 +447,7 @@ tmpfs_nocacheread(vm_object_t tobj, vm_p
 	vm_page_t	m;
 	int		error, rv;
 
-	VM_OBJECT_LOCK(tobj);
+	VM_OBJECT_WLOCK(tobj);
 	m = vm_page_grab(tobj, idx, VM_ALLOC_WIRED |
 	    VM_ALLOC_NORMAL | VM_ALLOC_RETRY);
 	if (m->valid != VM_PAGE_BITS_ALL) {
@@ -457,20 +457,20 @@ tmpfs_nocacheread(vm_object_t tobj, vm_p
 				vm_page_lock(m);
 				vm_page_free(m);
 				vm_page_unlock(m);
-				VM_OBJECT_UNLOCK(tobj);
+				VM_OBJECT_WUNLOCK(tobj);
 				return (EIO);
 			}
 		} else
 			vm_page_zero_invalid(m, TRUE);
 	}
-	VM_OBJECT_UNLOCK(tobj);
+	VM_OBJECT_WUNLOCK(tobj);
 	error = uiomove_fromphys(&m, offset, tlen, uio);
-	VM_OBJECT_LOCK(tobj);
+	VM_OBJECT_WLOCK(tobj);
 	vm_page_lock(m);
 	vm_page_unwire(m, TRUE);
 	vm_page_unlock(m);
 	vm_page_wakeup(m);
-	VM_OBJECT_UNLOCK(tobj);
+	VM_OBJECT_WUNLOCK(tobj);
 
 	return (error);
 }
@@ -513,7 +513,7 @@ tmpfs_mappedread(vm_object_t vobj, vm_ob
 	offset = addr & PAGE_MASK;
 	tlen = MIN(PAGE_SIZE - offset, len);
 
-	VM_OBJECT_LOCK(vobj);
+	VM_OBJECT_WLOCK(vobj);
 lookupvpg:
 	if (((m = vm_page_lookup(vobj, idx)) != NULL) &&
 	    vm_page_is_valid(m, offset, tlen)) {
@@ -527,11 +527,11 @@ lookupvpg:
 			goto lookupvpg;
 		}
 		vm_page_busy(m);
-		VM_OBJECT_UNLOCK(vobj);
+		VM_OBJECT_WUNLOCK(vobj);
 		error = uiomove_fromphys(&m, offset, tlen, uio);
-		VM_OBJECT_LOCK(vobj);
+		VM_OBJECT_WLOCK(vobj);
 		vm_page_wakeup(m);
-		VM_OBJECT_UNLOCK(vobj);
+		VM_OBJECT_WUNLOCK(vobj);
 		return	(error);
 	} else if (m != NULL && uio->uio_segflg == UIO_NOCOPY) {
 		KASSERT(offset == 0,
@@ -546,7 +546,7 @@ lookupvpg:
 			goto lookupvpg;
 		}
 		vm_page_busy(m);
-		VM_OBJECT_UNLOCK(vobj);
+		VM_OBJECT_WUNLOCK(vobj);
 		sched_pin();
 		sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
 		ma = (char *)sf_buf_kva(sf);

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list