summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/swap_pager.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index ea697ca..73cddff 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -597,23 +597,23 @@ swp_pager_getswapspace(int npages)
blk = blist_alloc(sp->sw_blist, npages);
if (blk != SWAPBLK_NONE) {
blk += sp->sw_first;
- swap_pager_avail -= npages;
sp->sw_used += npages;
+ swap_pager_avail -= npages;
swp_sizecheck();
swdevhd = TAILQ_NEXT(sp, sw_list);
- mtx_unlock(&sw_dev_mtx);
- return(blk);
+ goto done;
}
}
sp = TAILQ_NEXT(sp, sw_list);
}
- mtx_unlock(&sw_dev_mtx);
if (swap_pager_full != 2) {
printf("swap_pager_getswapspace(%d): failed\n", npages);
swap_pager_full = 2;
swap_pager_almost_full = 1;
}
swdevhd = NULL;
+done:
+ mtx_unlock(&sw_dev_mtx);
return (blk);
}
@@ -2174,9 +2174,9 @@ swaponsomething(struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strateg
sp->sw_end = dvbase + nblks;
TAILQ_INSERT_TAIL(&swtailq, sp, sw_list);
nswapdev++;
- mtx_unlock(&sw_dev_mtx);
swap_pager_avail += nblks;
- swap_pager_full = 0;
+ swp_sizecheck();
+ mtx_unlock(&sw_dev_mtx);
}
/*
@@ -2278,9 +2278,9 @@ found:
mtx_lock(&sw_dev_mtx);
TAILQ_REMOVE(&swtailq, sp, sw_list);
nswapdev--;
- mtx_unlock(&sw_dev_mtx);
if (swdevhd == sp)
swdevhd = NULL;
+ mtx_unlock(&sw_dev_mtx);
blist_destroy(sp->sw_blist);
free(sp, M_VMPGDATA);
OpenPOWER on IntegriCloud