summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-04-20 07:08:30 +0000
committeralc <alc@FreeBSD.org>2003-04-20 07:08:30 +0000
commit114f28a272dbc3c18401c4bd3dd35bd8cf1d9fad (patch)
tree2005ad98f16d74e148eb9aa920e68a8ff347692f /sys/vm
parent089fc0a1b0cf902d93f0f3438d6c225265c7d338 (diff)
downloadFreeBSD-src-114f28a272dbc3c18401c4bd3dd35bd8cf1d9fad.zip
FreeBSD-src-114f28a272dbc3c18401c4bd3dd35bd8cf1d9fad.tar.gz
- Lock the vm_object when performing vm_object_pip_add().
- Remove an unnecessary variable.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/swap_pager.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index 285c269..4cff663 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -1002,7 +1002,6 @@ swap_pager_getpages(object, m, count, reqpage)
int i;
int j;
daddr_t blk;
- vm_offset_t kva;
vm_pindex_t lastpindex;
GIANT_REQUIRED;
@@ -1077,20 +1076,18 @@ swap_pager_getpages(object, m, count, reqpage)
* Get a swap buffer header to perform the IO
*/
bp = getpbuf(&nsw_rcount);
- kva = (vm_offset_t) bp->b_data;
/*
* map our page(s) into kva for input
*
* NOTE: B_PAGING is set by pbgetvp()
*/
- pmap_qenter(kva, m + i, j - i);
+ pmap_qenter((vm_offset_t)bp->b_data, m + i, j - i);
bp->b_iocmd = BIO_READ;
bp->b_iodone = swp_pager_async_iodone;
bp->b_rcred = crhold(thread0.td_ucred);
bp->b_wcred = crhold(thread0.td_ucred);
- bp->b_data = (caddr_t) kva;
bp->b_blkno = blk - (reqpage - i);
bp->b_bcount = PAGE_SIZE * (j - i);
bp->b_bufsize = PAGE_SIZE * (j - i);
@@ -1117,7 +1114,9 @@ swap_pager_getpages(object, m, count, reqpage)
* We still hold the lock on mreq, and our automatic completion routine
* does not remove it.
*/
+ VM_OBJECT_LOCK(mreq->object);
vm_object_pip_add(mreq->object, bp->b_npages);
+ VM_OBJECT_UNLOCK(mreq->object);
lastpindex = m[j-1]->pindex;
/*
OpenPOWER on IntegriCloud