Prior to r188331 a map entry's last read offset was only updated by a hard

fault.  In r188331 this update was relocated because of synchronization
changes to a place where it would occur on both hard and soft faults.  This
change again restricts the update to hard faults.
This commit is contained in:
Alan Cox 2009-02-25 07:52:53 +00:00
parent e0bc0fad3d
commit 5758fe7185

View File

@ -868,13 +868,17 @@ RetryFault:;
}
}
/*
* update lastr imperfectly (we do not know how much
* getpages will actually read), but good enough.
* If the page was filled by a pager, update the map entry's
* last read offset. Since the pager does not return the
* actual set of pages that it read, this update is based on
* the requested set. Typically, the requested and actual
* sets are the same.
*
* XXX The following assignment modifies the map
* without holding a write lock on it.
*/
fs.entry->lastr = fs.pindex + faultcount - behind;
if (hardfault)
fs.entry->lastr = fs.pindex + faultcount - behind;
if (prot & VM_PROT_WRITE) {
vm_object_set_writeable_dirty(fs.object);