diff options
author | alc <alc@FreeBSD.org> | 2003-06-13 03:02:28 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-06-13 03:02:28 +0000 |
commit | d66a37a0f2941403e0d02a5cb82f14bdb07338cc (patch) | |
tree | 131300009b7d968e4f3ac335ab6af00d92af89ef /sys/vm/vm_pager.h | |
parent | f7366986b75e25cef2a0167fe951b8ee613d671a (diff) | |
download | FreeBSD-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.h | 7 |
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); } |