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.
This commit is contained in:
parent
578dc923a9
commit
02fa91d35e
@ -372,10 +372,13 @@ vm_pageout_flush(mc, count, flags)
|
|||||||
*
|
*
|
||||||
* We do not have to fixup the clean/dirty bits here... we can
|
* We do not have to fixup the clean/dirty bits here... we can
|
||||||
* allow the pager to do it after the I/O completes.
|
* 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++) {
|
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_io_start(mc[i]);
|
||||||
vm_page_protect(mc[i], VM_PROT_READ);
|
vm_page_protect(mc[i], VM_PROT_READ);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user