diff options
| author | Alan Cox <alc@FreeBSD.org> | 2003-07-01 07:33:41 +0000 |
|---|---|---|
| committer | Alan Cox <alc@FreeBSD.org> | 2003-07-01 07:33:41 +0000 |
| commit | c53e8c5654b2cbef53890632c0bfac3bc4685ada (patch) | |
| tree | 2c259ebaf6b23bcd85ade4f364399eab9a3f3905 | |
| parent | 8526ce9b648d14dc72e1ae786b8ed021a0760ef6 (diff) | |
Notes
| -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 0df20b5605cb..767fbbff8acc 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 { /* |
