diff options
| author | Alan Cox <alc@FreeBSD.org> | 2002-06-22 07:28:06 +0000 |
|---|---|---|
| committer | Alan Cox <alc@FreeBSD.org> | 2002-06-22 07:28:06 +0000 |
| commit | 990ab7add421e8f129175d4f9ee1a3a8da29765f (patch) | |
| tree | 8dfb9d5f566595da7c5579ebf0c5ea6018c86ca2 /sys/vm/vnode_pager.c | |
| parent | 5953156dca4ca279469d80edeccfdd34e918cf80 (diff) | |
Notes
Diffstat (limited to 'sys/vm/vnode_pager.c')
| -rw-r--r-- | sys/vm/vnode_pager.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index 4292a53cf059..32660d361153 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -102,6 +102,8 @@ vnode_pager_init(void) /* * Allocate (or lookup) pager for a vnode. * Handle is a vnode pointer. + * + * MPSAFE */ vm_object_t vnode_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, @@ -110,8 +112,6 @@ vnode_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, vm_object_t object; struct vnode *vp; - GIANT_REQUIRED; - /* * Pageout to vnode, no can do yet. */ @@ -120,6 +120,7 @@ vnode_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, vp = (struct vnode *) handle; + mtx_lock(&Giant); /* * Prevent race condition when allocating the object. This * can happen with NFS vnodes since the nfsnode isn't locked. @@ -147,23 +148,21 @@ vnode_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, * And an object of the appropriate size */ object = vm_object_allocate(OBJT_VNODE, OFF_TO_IDX(round_page(size))); - object->flags = 0; object->un_pager.vnp.vnp_size = size; object->handle = handle; vp->v_object = object; - vp->v_usecount++; } else { object->ref_count++; - vp->v_usecount++; } - + vp->v_usecount++; vp->v_flag &= ~VOLOCK; if (vp->v_flag & VOWANT) { vp->v_flag &= ~VOWANT; wakeup(vp); } + mtx_unlock(&Giant); return (object); } |
