freebsd-dev/sys/vm
Tor Egge ff91d7800f Revert change in revision 1.53 and add a small comment to protect
the revived code.

vm pages newly allocated are marked busy (PG_BUSY), thus calling
vm_page_delete before the pages has been freed or unbusied will
cause a deadlock since vm_page_object_page_remove will wait for the
busy flag to be cleared.  This can be triggered by calling malloc
with size > PAGE_SIZE and the M_NOWAIT flag on systems low on
physical free memory.

A kernel module that reproduces the problem, written by Logan Gabriel
<logan@mail.2cactus.com>, can be found in the freebsd-hackers mail
archive (12 Apr 2001).  The problem was recently noticed again by
Archie Cobbs <archie@dellroad.org>.

Reviewed by:	dillon
2002-03-09 16:24:27 +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 Fix a horribly suboptimal algorithm in the vm_daemon. 2002-02-27 18:03:02 +00:00
swap_pager.c Use thread0.td_ucred instead of proc0.p_ucred. This change is cosmetic 2002-02-27 19:18:10 +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 Call vm_pageq_remove_nowakeup() rather than duplicating it. 2002-03-03 22:36:14 +00:00
vm_extern.h Pre-KSE/M3 commit. 2002-02-07 20:58:47 +00:00
vm_fault.c Changes to make the OOM killer much more effective: 2002-02-19 18:34:02 +00:00
vm_glue.c Remove unused variable (td) 2002-02-26 01:01:37 +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 Revert change in revision 1.53 and add a small comment to protect 2002-03-09 16:24:27 +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 Fix a bug in the vm_map_clean() procedure. msync()ing an area of memory 2002-03-07 03:54:56 +00:00
vm_map.h Fix a race with free'ing vmspaces at process exit when vmspaces are 2002-02-05 21:23:05 +00:00
vm_meter.c In a threaded world, differnt priorirites become properties of 2002-02-11 20:37:54 +00:00
vm_mmap.c Simple p_ucred -> td_ucred changes to start using the per-thread ucred 2002-02-27 18:32:23 +00:00
vm_object.c Add a sequential iteration optimization to vm_object_page_clean(). This 2002-03-06 02:42:56 +00:00
vm_object.h Implement kern.maxvnodes. adjusting kern.maxvnodes now actually has a 2001-10-26 00:08:05 +00:00
vm_page.c o Create vm_pageq_enqueue() to encapsulate code that is duplicated time 2002-03-04 18:55:26 +00:00
vm_page.h o Create vm_pageq_enqueue() to encapsulate code that is duplicated time 2002-03-04 18:55:26 +00:00
vm_pageout.c Fix a horribly suboptimal algorithm in the vm_daemon. 2002-02-27 18:03:02 +00:00
vm_pageout.h Changes to make the OOM killer much more effective: 2002-02-19 18:34:02 +00:00
vm_pageq.c o Create vm_pageq_enqueue() to encapsulate code that is duplicated time 2002-03-04 18:55:26 +00:00
vm_pager.c * Move bswlist declaration and initialization from kern/vfs_bio.c to 2002-03-05 18:20:58 +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 Simple p_ucred -> td_ucred changes to start using the per-thread ucred 2002-02-27 18:32:23 +00:00
vm_unix.c Garbage-collect options ACPI_NO_ENABLE_ON_BOOT, AML_DEBUG, BLEED, 2002-02-15 13:16:11 +00:00
vm_zeroidle.c In a threaded world, differnt priorirites become properties of 2002-02-11 20:37:54 +00:00
vm_zone.c Back out all the pmap related stuff I've touched over the last few days. 2002-02-27 09:51:33 +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 Remove a parameter name from a prototype. 2002-01-25 21:33:10 +00:00
vnode_pager.c Simple p_ucred -> td_ucred changes to start using the per-thread ucred 2002-02-27 18:32:23 +00:00
vnode_pager.h vnode_pager_freepage() is really vm_page_free() in disguise, 2001-04-19 06:18:23 +00:00