freebsd-nq/sys/vm
Matthew Dillon 00a6f47f13 Finally fix the VM bug where a file whos EOF occurs in the middle of a page
would sometimes prevent a dirty page from being cleaned, even when synced,
resulting in the dirty page being re-flushed to disk every 30-60 seconds or
so, forever.  The problem is that when the filesystem flushes a page to
its backing file it typically does not clear dirty bits representing areas
of the page that are beyond the file EOF.  If the file is also mmap()'d and
a fault is taken, vm_fault (properly, is required to) set the vm_page_t->dirty
bits to VM_PAGE_BITS_ALL.  This combination could leave us with an uncleanable,
unfreeable page.

The solution is to have the vnode_pager detect the edge case and manually
clear the dirty bits representing areas beyond the file EOF.  The filesystem
does the rest and the page comes up clean after the write completes.

MFC after:	3 days
2001-10-12 18:17:34 +00:00
..
default_pager.c With Alfred's permission, remove vm_mtx in favor of a fine-grained approach 2001-07-04 16:20:28 +00:00
device_pager.c With Alfred's permission, remove vm_mtx in favor of a fine-grained approach 2001-07-04 16:20:28 +00:00
phys_pager.c With Alfred's permission, remove vm_mtx in favor of a fine-grained approach 2001-07-04 16:20:28 +00:00
pmap.h KSE Milestone 2 2001-09-12 08:38:13 +00:00
swap_pager.c Change the kernel's ucred API as follows: 2001-10-11 23:38:17 +00:00
swap_pager.h - If swap metadata does not fit into the KVM, reduce the number of 2000-12-13 10:01:00 +00:00
vm_contig.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_extern.h KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_fault.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_glue.c Make MAXTSIZ, DFLDSIZ, MAXDSIZ, DFLSSIZ, MAXSSIZ, SGROWSIZ loader 2001-10-10 23:06:54 +00:00
vm_init.c Move most of the kernel submap initialization code, including the 2001-08-22 04:07:27 +00:00
vm_kern.c - Remove asleep(), await(), and M_ASLEEP. 2001-08-10 06:56:12 +00:00
vm_kern.h Introduce numerous SMP friendly changes to the mbuf allocator. Namely, 2001-06-22 06:35:32 +00:00
vm_map.c Add missing includes of sys/ktr.h. 2001-10-11 17:53:43 +00:00
vm_map.h KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_meter.c Remove the SSLEEP case from the load average computation. This has 2001-10-04 22:33:31 +00:00
vm_mmap.c Make MAXTSIZ, DFLDSIZ, MAXDSIZ, DFLSSIZ, MAXSSIZ, SGROWSIZ loader 2001-10-10 23:06:54 +00:00
vm_object.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_object.h Oops. Last commit to vm_object.c should have got these files too. 2001-07-31 04:09:52 +00:00
vm_page.c Implement idle zeroing of pages. I've been tinkering with this 2001-08-25 05:00:44 +00:00
vm_page.h Implement idle zeroing of pages. I've been tinkering with this 2001-08-25 05:00:44 +00:00
vm_pageout.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_pageout.h - Remove asleep(), await(), and M_ASLEEP. 2001-08-10 06:37:05 +00:00
vm_pageq.c Reorg vm_page.c into vm_page.c, vm_pageq.c, and vm_contig.c (for contigmalloc). 2001-07-04 23:27:09 +00:00
vm_pager.c Whitespace fixes. 2001-08-04 20:49:29 +00:00
vm_pager.h With Alfred's permission, remove vm_mtx in favor of a fine-grained approach 2001-07-04 16:20:28 +00:00
vm_param.h Make MAXTSIZ, DFLDSIZ, MAXDSIZ, DFLSSIZ, MAXSSIZ, SGROWSIZ loader 2001-10-10 23:06:54 +00:00
vm_swap.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_unix.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_zeroidle.c KSE Milestone 2 2001-09-12 08:38:13 +00:00
vm_zone.c Add a missing semicolon to unbreak the kernel build with INVARIANTS 2001-08-05 03:55:02 +00:00
vm_zone.h Add a zdestroy() function to the zone allocator. This is needed for the 2001-08-04 20:17:05 +00:00
vm.h Move most of the kernel submap initialization code, including the 2001-08-22 04:07:27 +00:00
vnode_pager.c Finally fix the VM bug where a file whos EOF occurs in the middle of a page 2001-10-12 18:17:34 +00:00
vnode_pager.h vnode_pager_freepage() is really vm_page_free() in disguise, 2001-04-19 06:18:23 +00:00