summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-04-29 05:23:01 +0000
committeralc <alc@FreeBSD.org>2002-04-29 05:23:01 +0000
commitd61adfe67867ef34d9c1418efc0221ae7edf0e4f (patch)
treea57197826058801ab7d0cd69a8bf3bf10c7dda4f /sys
parent2c66f4a2cd9de7744b7ce8c07fc96b3be0000f53 (diff)
downloadFreeBSD-src-d61adfe67867ef34d9c1418efc0221ae7edf0e4f.zip
FreeBSD-src-d61adfe67867ef34d9c1418efc0221ae7edf0e4f.tar.gz
Document three synchronization issues in vm_fault().
Diffstat (limited to 'sys')
-rw-r--r--sys/vm/vm_fault.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 757f573..0af7dc4 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -278,6 +278,8 @@ RetryFault:;
* Bump the paging-in-progress count to prevent size changes (e.g.
* truncation operations) during I/O. This must be done after
* obtaining the vnode lock in order to avoid possible deadlocks.
+ *
+ * XXX vnode_pager_lock() can block without releasing the map lock.
*/
vm_object_reference(fs.first_object);
fs.vp = vnode_pager_lock(fs.first_object);
@@ -479,6 +481,9 @@ readrest:
* vm_page_t passed to the routine.
*
* fs.m plus the additional pages are PG_BUSY'd.
+ *
+ * XXX vm_fault_additional_pages() can block
+ * without releasing the map lock.
*/
faultcount = vm_fault_additional_pages(
fs.m, behind, ahead, marray, &reqpage);
@@ -486,6 +491,9 @@ readrest:
/*
* update lastr imperfectly (we do not know how much
* getpages will actually read), but good enough.
+ *
+ * XXX The following assignment modifies the map
+ * without holding a write lock on it.
*/
fs.entry->lastr = fs.pindex + faultcount - behind;
OpenPOWER on IntegriCloud