summaryrefslogtreecommitdiffstats
path: root/sys/uvm/uvm_swap.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/uvm/uvm_swap.c')
-rw-r--r--sys/uvm/uvm_swap.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/sys/uvm/uvm_swap.c b/sys/uvm/uvm_swap.c
index dbb1572e18b..71b1a7b9481 100644
--- a/sys/uvm/uvm_swap.c
+++ b/sys/uvm/uvm_swap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_swap.c,v 1.62 2006/06/21 16:20:05 mickey Exp $ */
+/* $OpenBSD: uvm_swap.c,v 1.63 2006/07/13 22:51:26 deraadt Exp $ */
/* $NetBSD: uvm_swap.c,v 1.40 2000/11/17 11:39:39 mrg Exp $ */
/*
@@ -1061,6 +1061,11 @@ swap_on(p, sdp)
*/
vref(vp);
+ /*
+ * add anons to reflect the new swap space
+ */
+ uvm_anon_add(size);
+
#ifdef UVM_SWAP_ENCRYPT
if (uvm_doswapencrypt)
uvm_swap_initcrypt(sdp, npages);
@@ -1096,7 +1101,6 @@ swap_off(p, sdp)
struct proc *p;
struct swapdev *sdp;
{
- int error;
UVMHIST_FUNC("swap_off"); UVMHIST_CALLED(pdhist);
UVMHIST_LOG(pdhist, " dev=%x", sdp->swd_dev,0,0,0);
@@ -1113,20 +1117,15 @@ swap_off(p, sdp)
if (uao_swap_off(sdp->swd_drumoffset,
sdp->swd_drumoffset + sdp->swd_drumsize) ||
- amap_swap_off(sdp->swd_drumoffset,
+ anon_swap_off(sdp->swd_drumoffset,
sdp->swd_drumoffset + sdp->swd_drumsize)) {
- error = ENOMEM;
- } else if (sdp->swd_npginuse > sdp->swd_npgbad) {
- error = EBUSY;
- }
-
- if (error) {
simple_lock(&uvm.swap_data_lock);
sdp->swd_flags |= SWF_ENABLE;
simple_unlock(&uvm.swap_data_lock);
- return (error);
+ return ENOMEM;
}
+ KASSERT(sdp->swd_npginuse == sdp->swd_npgbad);
/*
* done with the vnode and saved creds.
@@ -1141,6 +1140,9 @@ swap_off(p, sdp)
(void) VOP_CLOSE(sdp->swd_vp, FREAD|FWRITE, p->p_ucred, p);
}
+ /* remove anons from the system */
+ uvm_anon_remove(sdp->swd_npages);
+
simple_lock(&uvm.swap_data_lock);
uvmexp.swpages -= sdp->swd_npages;