summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_object.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-06-19 06:02:03 +0000
committeralc <alc@FreeBSD.org>2002-06-19 06:02:03 +0000
commit6c0c1a3de38306f5105ac83bd1939798585a738c (patch)
tree97321f305f287e32e95b6702f8dc833cd0e1c136 /sys/vm/vm_object.c
parent690ea8569d9ac749fee3c42bb6ac1c4c946a30b5 (diff)
downloadFreeBSD-src-6c0c1a3de38306f5105ac83bd1939798585a738c.zip
FreeBSD-src-6c0c1a3de38306f5105ac83bd1939798585a738c.tar.gz
o Replace GIANT_REQUIRED in vm_object_coalesce() by the acquisition and
release of Giant. o Reduce the scope of GIANT_REQUIRED in vm_map_insert(). These changes will enable us to remove the acquisition and release of Giant from obreak().
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r--sys/vm/vm_object.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index d046941..b07d6b8 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -1813,18 +1813,17 @@ again:
* The object must *not* be locked.
*/
boolean_t
-vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t prev_size, vm_size_t next_size)
+vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex,
+ vm_size_t prev_size, vm_size_t next_size)
{
vm_pindex_t next_pindex;
- GIANT_REQUIRED;
-
- if (prev_object == NULL) {
+ if (prev_object == NULL)
return (TRUE);
- }
-
+ mtx_lock(&Giant);
if (prev_object->type != OBJT_DEFAULT &&
prev_object->type != OBJT_SWAP) {
+ mtx_unlock(&Giant);
return (FALSE);
}
@@ -1839,6 +1838,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t p
* pages not mapped to prev_entry may be in use anyway)
*/
if (prev_object->backing_object != NULL) {
+ mtx_unlock(&Giant);
return (FALSE);
}
@@ -1848,6 +1848,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t p
if ((prev_object->ref_count > 1) &&
(prev_object->size != next_pindex)) {
+ mtx_unlock(&Giant);
return (FALSE);
}
@@ -1870,6 +1871,7 @@ vm_object_coalesce(vm_object_t prev_object, vm_pindex_t prev_pindex, vm_size_t p
if (next_pindex + next_size > prev_object->size)
prev_object->size = next_pindex + next_size;
+ mtx_unlock(&Giant);
return (TRUE);
}
OpenPOWER on IntegriCloud