diff options
-rw-r--r-- | sys/vm/vm_page.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 0df20b5..767fbbf 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -720,7 +720,8 @@ vm_page_select_cache(int color) m = vm_pageq_find(PQ_CACHE, color, FALSE); if (m && ((m->flags & (PG_BUSY|PG_UNMANAGED)) || m->busy || m->hold_count || m->wire_count || - !VM_OBJECT_TRYLOCK(m->object))) { + (!VM_OBJECT_TRYLOCK(m->object) && + !VM_OBJECT_LOCKED(m->object)))) { vm_page_deactivate(m); continue; } @@ -810,7 +811,8 @@ loop: pmap_remove_all(m); vm_page_free(m); vm_page_unlock_queues(); - VM_OBJECT_UNLOCK(m_object); + if (m_object != object) + VM_OBJECT_UNLOCK(m_object); goto loop; } else { /* |