summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>2000-12-11 07:52:47 +0000
committerdillon <dillon@FreeBSD.org>2000-12-11 07:52:47 +0000
commit7317f3870256e3abce6b6ed644bfe2633846aa2e (patch)
treebf983d5d610f0e90f0f96fa9bf8e17f17891ff73 /sys/vm
parent30692b9f99d0418ca6f6ee42ae77302342cbad20 (diff)
downloadFreeBSD-src-7317f3870256e3abce6b6ed644bfe2633846aa2e.zip
FreeBSD-src-7317f3870256e3abce6b6ed644bfe2633846aa2e.tar.gz
Be less conservative with a recently added KASSERT. Certain edge
cases with file fragments and read-write mmap's can lead to a situation where a VM page has odd dirty bits, e.g. 0xFC - due to being dirtied by an mmap and only the fragment (representing a non-page-aligned end of file) synced via a filesystem buffer. A correct solution that guarentees consistent m->dirty for the file EOF case is being worked on. In the mean time we can't be so conservative in the KASSERT.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_pageout.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 762b293..90ab288 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -372,10 +372,13 @@ vm_pageout_flush(mc, count, flags)
*
* We do not have to fixup the clean/dirty bits here... we can
* allow the pager to do it after the I/O completes.
+ *
+ * NOTE! mc[i]->dirty may be partial or fragmented due to an
+ * edge case with file fragments.
*/
for (i = 0; i < count; i++) {
- KASSERT(mc[i]->valid == VM_PAGE_BITS_ALL && mc[i]->dirty == VM_PAGE_BITS_ALL, ("vm_pageout_flush page %p index %d/%d: partially dirty page", mc[i], i, count));
+ KASSERT(mc[i]->valid == VM_PAGE_BITS_ALL, ("vm_pageout_flush page %p index %d/%d: partially invalid page", mc[i], i, count));
vm_page_io_start(mc[i]);
vm_page_protect(mc[i], VM_PROT_READ);
}
OpenPOWER on IntegriCloud