Date: Wed, 20 Feb 2013 12:03:20 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: 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... Message-ID: <201302201203.r1KC3Kro060814@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302201203.r1KC3Kro060814>