summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_object.c
diff options
context:
space:
mode:
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