diff options
Diffstat (limited to 'sys/uvm/uvm_swap.c')
-rw-r--r-- | sys/uvm/uvm_swap.c | 22 |
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; |