From c413d99c4e1edb7fd040a2745b83bec22db71508 Mon Sep 17 00:00:00 2001 From: Doug Rabson Date: Wed, 4 Aug 2004 08:58:58 +0000 Subject: [PATCH] In dev_pager_updatefake, m->valid is typically 0 on entry. It should be set to VM_PAGE_BITS_ALL before returning, to ensure that neither vm_pager_get_pages nor vm_fault calls vm_page_zero_invalid after dev_pager_getpages has returned. Submitted by: tegge --- sys/vm/device_pager.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c index e7a256d38bb..e1ce1612152 100644 --- a/sys/vm/device_pager.c +++ b/sys/vm/device_pager.c @@ -230,8 +230,8 @@ dev_pager_getpages(object, m, count, reqpage) * If the passed in reqpage page is a fake page, update it with * the new physical address. */ - dev_pager_updatefake(m[reqpage], paddr); VM_OBJECT_LOCK(object); + dev_pager_updatefake(m[reqpage], paddr); if (count > 1) { vm_page_lock_queues(); for (i = 0; i < count; i++) { @@ -323,4 +323,5 @@ dev_pager_updatefake(m, paddr) if (!(m->flags & PG_FICTITIOUS)) panic("dev_pager_updatefake: bad page"); m->phys_addr = paddr; + m->valid = VM_PAGE_BITS_ALL; }