Lock the vm object when removing a page.

This commit is contained in:
Alan Cox 2003-06-11 21:23:04 +00:00
parent 316b600c46
commit 2ab3670aad
2 changed files with 5 additions and 0 deletions

View file

@ -222,6 +222,7 @@ jumbo_pg_free(vm_offset_t addr)
paddr = pmap_kextract((vm_offset_t)addr);
pg = PHYS_TO_VM_PAGE(paddr);
VM_OBJECT_LOCK(jumbo_vm_object);
if (pg->object != jumbo_vm_object) {
jumbo_vmuiomove_pgs_freed++;
/* if(vm_page_lookup(jumbo_vm_object, atop(addr - jumbo_basekva)))
@ -235,6 +236,7 @@ jumbo_pg_free(vm_offset_t addr)
vm_page_free(pg);
vm_page_unlock_queues();
}
VM_OBJECT_UNLOCK(jumbo_vm_object);
mtx_lock(&jumbo_mutex);

View file

@ -1926,6 +1926,8 @@ retry_lookup:
IO_VMIO | ((MAXBSIZE / bsize) << 16),
td->td_ucred, NOCRED, &resid, td);
VOP_UNLOCK(vp, 0, td);
if (error)
VM_OBJECT_LOCK(obj);
vm_page_lock_queues();
vm_page_flag_clear(pg, PG_ZERO);
vm_page_io_finish(pg);
@ -1942,6 +1944,7 @@ retry_lookup:
vm_page_free(pg);
}
vm_page_unlock_queues();
VM_OBJECT_UNLOCK(obj);
sbunlock(&so->so_snd);
goto done;
}