From 1625d6386b23ec96cdde63544081b5711aac0e45 Mon Sep 17 00:00:00 2001 From: alc Date: Mon, 11 Aug 2003 00:17:44 +0000 Subject: Use vm_page_hold() instead of vm_page_wire(). Otherwise, a multithreaded application could cause a wired page to be freed. In general, vm_page_hold() should be preferred for ephemeral kernel mappings of pages borrowed from a user-level address space. (vm_page_wire() should really be reserved for indefinite duration pinning by the "owner" of the page.) Discussed with: silby Submitted by: tegge --- sys/kern/sys_pipe.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'sys/kern/sys_pipe.c') diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 3e5d507..0bf87fb 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -696,7 +696,7 @@ pipe_build_write_buffer(wpipe, uio) vm_page_lock_queues(); for (j = 0; j < i; j++) { - vm_page_unwire(wpipe->pipe_map.ms[j], 1); + vm_page_unhold(wpipe->pipe_map.ms[j]); atomic_subtract_int(&amountpipekvawired, PAGE_SIZE); } @@ -706,7 +706,7 @@ pipe_build_write_buffer(wpipe, uio) m = PHYS_TO_VM_PAGE(paddr); vm_page_lock_queues(); - vm_page_wire(m); + vm_page_hold(m); atomic_add_int(&amountpipekvawired, PAGE_SIZE); vm_page_unlock_queues(); wpipe->pipe_map.ms[i] = m; @@ -775,7 +775,7 @@ pipe_destroy_write_buffer(wpipe) } vm_page_lock_queues(); for (i = 0; i < wpipe->pipe_map.npages; i++) { - vm_page_unwire(wpipe->pipe_map.ms[i], 1); + vm_page_unhold(wpipe->pipe_map.ms[i]); atomic_subtract_int(&amountpipekvawired, PAGE_SIZE); } vm_page_unlock_queues(); -- cgit v1.1