From 8a8f5251fa38b7eed0a1411e89502dd307d6eac2 Mon Sep 17 00:00:00 2001 From: alc Date: Wed, 25 Feb 2009 07:52:53 +0000 Subject: 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. --- sys/vm/vm_fault.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'sys/vm/vm_fault.c') diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index e647288..bd7de42 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -868,13 +868,17 @@ vnode_locked: } } /* - * 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); -- cgit v1.1