summaryrefslogtreecommitdiffstats
path: root/lib/libc/net
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2007-07-02 06:56:37 +0000
committeralc <alc@FreeBSD.org>2007-07-02 06:56:37 +0000
commitab67a078687c55227d438cdeab0c7fd9f800f520 (patch)
tree52ca362de6cfc797c4996e2d77be3e452205e14e /lib/libc/net
parent03be3cbe9a4999d68c76e2d5336983a576cc33a0 (diff)
downloadFreeBSD-src-ab67a078687c55227d438cdeab0c7fd9f800f520.zip
FreeBSD-src-ab67a078687c55227d438cdeab0c7fd9f800f520.tar.gz
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
Diffstat (limited to 'lib/libc/net')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud