diff options
author | kib <kib@FreeBSD.org> | 2012-07-08 18:04:26 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-07-08 18:04:26 +0000 |
commit | aa091fdb2ae125164ac10aa9d8e195c33eb5b003 (patch) | |
tree | bc8f1829bf22453063c77b025d48c6b8e469aafb /sys/vm/vm_pageout.c | |
parent | 070f1b40dee0fd645f5c23ef2e65056284f5e544 (diff) | |
download | FreeBSD-src-aa091fdb2ae125164ac10aa9d8e195c33eb5b003.zip FreeBSD-src-aa091fdb2ae125164ac10aa9d8e195c33eb5b003.tar.gz |
Avoid vm page queues lock leak after r238212.
Reported and tested by: Michael Butler <imb protected-networks net>
Reviewed by: alc
Pointy hat to: kib
MFC after: 20 days
Diffstat (limited to 'sys/vm/vm_pageout.c')
-rw-r--r-- | sys/vm/vm_pageout.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 9485fdd..11d040d 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -1030,7 +1030,6 @@ rescan0: ++pageout_lock_miss; if (object->flags & OBJ_MIGHTBEDIRTY) vnodes_skipped++; - vm_page_lock_queues(); goto unlock_and_continue; } KASSERT(mp != NULL, @@ -1041,7 +1040,6 @@ rescan0: if (vget(vp, LK_EXCLUSIVE | LK_TIMELOCK, curthread)) { VM_OBJECT_LOCK(object); - vm_page_lock_queues(); ++pageout_lock_miss; if (object->flags & OBJ_MIGHTBEDIRTY) vnodes_skipped++; @@ -1083,14 +1081,14 @@ rescan0: * be undergoing I/O, so skip it */ if (m->hold_count) { - vm_page_lock_queues(); - queues_locked = TRUE; vm_page_unlock(m); vm_page_requeue(m); if (object->flags & OBJ_MIGHTBEDIRTY) vnodes_skipped++; goto unlock_and_continue; } + vm_page_unlock_queues(); + queues_locked = FALSE; } /* |