summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pager.h
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-06-13 03:02:28 +0000
committeralc <alc@FreeBSD.org>2003-06-13 03:02:28 +0000
commitd66a37a0f2941403e0d02a5cb82f14bdb07338cc (patch)
tree131300009b7d968e4f3ac335ab6af00d92af89ef /sys/vm/vm_pager.h
parentf7366986b75e25cef2a0167fe951b8ee613d671a (diff)
downloadFreeBSD-src-d66a37a0f2941403e0d02a5cb82f14bdb07338cc.zip
FreeBSD-src-d66a37a0f2941403e0d02a5cb82f14bdb07338cc.tar.gz
Add vm object locking to various pagers' "get pages" methods, i386 stack
management functions, and a u area management function.
Diffstat (limited to 'sys/vm/vm_pager.h')
-rw-r--r--sys/vm/vm_pager.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/vm/vm_pager.h b/sys/vm/vm_pager.h
index 07b6878..c578c36 100644
--- a/sys/vm/vm_pager.h
+++ b/sys/vm/vm_pager.h
@@ -119,14 +119,17 @@ vm_pager_get_pages(
int count,
int reqpage
) {
+ int is_object_locked;
int r;
- GIANT_REQUIRED;
-
+ if (!(is_object_locked = VM_OBJECT_LOCKED(object)))
+ VM_OBJECT_LOCK(object);
r = (*pagertab[object->type]->pgo_getpages)(object, m, count, reqpage);
if (r == VM_PAGER_OK && m[reqpage]->valid != VM_PAGE_BITS_ALL) {
vm_page_zero_invalid(m[reqpage], TRUE);
}
+ if (!is_object_locked)
+ VM_OBJECT_UNLOCK(object);
return (r);
}
OpenPOWER on IntegriCloud