From ed4fe4f4f5dd2ae7ef62e004a3e1bdd071b8fee6 Mon Sep 17 00:00:00 2001 From: Jeff Roberson Date: Tue, 3 May 2005 11:11:26 +0000 Subject: - Add a new object flag "OBJ_NEEDSGIANT". We set this flag if the underlying vnode requires Giant. - In vm_fault only acquire Giant if the underlying object has NEEDSGIANT set. - In vm_object_shadow inherit the NEEDSGIANT flag from the backing object. --- sys/vm/vnode_pager.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'sys/vm/vnode_pager.c') diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index 2ad9d15cbb4a..733eea45d4f5 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -231,6 +231,8 @@ vnode_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, object->un_pager.vnp.vnp_size = size; object->handle = handle; + if (VFS_NEEDSGIANT(vp->v_mount)) + vm_object_set_flag(object, OBJ_NEEDGIANT); vp->v_object = object; } else { object->ref_count++; @@ -1188,6 +1190,7 @@ vnode_pager_lock(vm_object_t first_object) VM_OBJECT_UNLOCK(object); if (first_object != object) VM_OBJECT_UNLOCK(first_object); + VFS_ASSERT_GIANT(vp->v_mount); if (vget(vp, LK_CANRECURSE | LK_INTERLOCK | LK_RETRY | LK_SHARED, curthread)) { VM_OBJECT_LOCK(first_object); -- cgit v1.3