summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_map.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-04-30 00:43:17 +0000
committeralc <alc@FreeBSD.org>2003-04-30 00:43:17 +0000
commit668955a3c5893b64f588c8be729010bc97bd313e (patch)
tree93e0ea77fa19141fa9473896598771ed60405411 /sys/vm/vm_map.c
parentc3c465c42ca1283892f28dc8e0d5868737c72f56 (diff)
downloadFreeBSD-src-668955a3c5893b64f588c8be729010bc97bd313e.zip
FreeBSD-src-668955a3c5893b64f588c8be729010bc97bd313e.tar.gz
Add vm_object locking to vmspace_swap_count().
Diffstat (limited to 'sys/vm/vm_map.c')
-rw-r--r--sys/vm/vm_map.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 8ea43b6..38fe0e2 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -363,15 +363,16 @@ vmspace_swap_count(struct vmspace *vmspace)
vm_object_t object;
if ((cur->eflags & MAP_ENTRY_IS_SUB_MAP) == 0 &&
- (object = cur->object.vm_object) != NULL &&
- object->type == OBJT_SWAP
- ) {
- int n = (cur->end - cur->start) / PAGE_SIZE;
+ (object = cur->object.vm_object) != NULL) {
+ VM_OBJECT_LOCK(object);
+ if (object->type == OBJT_SWAP &&
+ object->un_pager.swp.swp_bcount != 0) {
+ int n = (cur->end - cur->start) / PAGE_SIZE;
- if (object->un_pager.swp.swp_bcount) {
count += object->un_pager.swp.swp_bcount *
SWAP_META_PAGES * n / object->size + 1;
}
+ VM_OBJECT_UNLOCK(object);
}
}
return (count);
OpenPOWER on IntegriCloud