freebsd-dev/sys/vm
Alan Cox 14137dc045 In the previous revision, when I replaced the unconditional acquisition
of Giant in vm_pageout_scan() with VFS_LOCK_GIANT(), I had to eliminate
the acquisition of the vnode interlock before releasing the vm object's
lock because the vnode interlock cannot be held when VFS_LOCK_GIANT() is
performed.  Unfortunately, this allows the vnode to be recycled between
the release of the vm object's lock and the vget() on the vnode.

In this revision, I prevent the vnode from being recycled by acquiring
another reference to the vm object and underlying vnode before releasing
the vm object's lock.

This change also addresses another preexisting but trivial problem.  By
acquiring another reference to the vm object, I also prevent the vm
object from being recycled.  Previously, the "vnodes skipped" counter
could be wrong because if it examined a recycled vm object.

Reported by:	kib
Reviewed by:	kib
Approved by:	re (kensmith)
MFC after:	3 weeks
2007-07-02 06:56:37 +00:00
..
default_pager.c
device_pager.c Replace PG_BUSY with VPO_BUSY. In other words, changes to the page's 2006-10-22 04:28:14 +00:00
memguard.c
memguard.h
phys_pager.c Minor typo fix, noticed while I was going through *_pager.c files. 2007-04-10 12:34:51 +00:00
pmap.h Complete the transition from pmap_page_protect() to pmap_remove_write(). 2006-08-01 19:06:06 +00:00
redzone.c
redzone.h
swap_pager.c Eliminate GIANT_REQUIRED from swap_pager_putpages(). 2007-06-24 18:40:30 +00:00
swap_pager.h - Move 'struct swdevt' back into swap_pager.h and expose it to userland. 2007-02-07 17:43:11 +00:00
uma_core.c Revert VMCNT_* operations introduction. 2007-05-31 22:52:15 +00:00
uma_dbg.c
uma_dbg.h
uma_int.h Update stale comment on protecting UMA per-CPU caches: we now use 2007-05-09 22:53:34 +00:00
uma.h Add uma_set_align() interface, which will be called at most once during 2007-02-11 20:13:52 +00:00
vm_contig.c Enable the new physical memory allocator. 2007-06-16 04:57:06 +00:00
vm_extern.h Close race between vmspace_exitfree() and exit1() and races between 2006-05-29 21:28:56 +00:00
vm_fault.c Initialize reqpage to zero. 2007-06-17 04:14:27 +00:00
vm_glue.c Commit 14/14 of sched_lock decomposition. 2007-06-05 00:00:57 +00:00
vm_init.c
vm_kern.c When KVA is exhausted, try the vm_lowmem event for the last time before 2007-04-05 20:52:51 +00:00
vm_kern.h The clean_map has been made local to vm_init.c long ago. 2006-11-20 16:23:34 +00:00
vm_map.c Revert VMCNT_* operations introduction. 2007-05-31 22:52:15 +00:00
vm_map.h Close race between vmspace_exitfree() and exit1() and races between 2006-05-29 21:28:56 +00:00
vm_meter.c Commit 14/14 of sched_lock decomposition. 2007-06-05 00:00:57 +00:00
vm_mmap.c Make sure object is NULL- there is a possible case where you could 2007-06-17 04:17:48 +00:00
vm_object.c Enable the new physical memory allocator. 2007-06-16 04:57:06 +00:00
vm_object.h Eliminate OBJ_WRITEABLE. It hasn't been used in a long time. 2006-07-21 06:40:29 +00:00
vm_page.c Don't declare inline a function which isn't. 2007-06-17 04:19:05 +00:00
vm_page.h Enable the new physical memory allocator. 2007-06-16 04:57:06 +00:00
vm_pageout.c In the previous revision, when I replaced the unconditional acquisition 2007-07-02 06:56:37 +00:00
vm_pageout.h
vm_pageq.c Enable the new physical memory allocator. 2007-06-16 04:57:06 +00:00
vm_pager.c
vm_pager.h
vm_param.h Correct two comments. 2007-04-19 04:52:47 +00:00
vm_phys.c Update a comment. 2007-06-16 05:25:53 +00:00
vm_phys.h Add a new physical memory allocator. However, do not yet connect it 2007-06-10 00:49:16 +00:00
vm_unix.c
vm_zeroidle.c Enable the new physical memory allocator. 2007-06-16 04:57:06 +00:00
vm.h Retire debug.mpsafevm. None of the architectures supported in CVS require 2006-07-21 23:22:49 +00:00
vnode_pager.c Do proper "locking" for missing vmmeters part. 2007-06-04 21:45:18 +00:00
vnode_pager.h