Apply the limit to avoid the overflows in the radix tree subr_blist.c

after the conversion of the swap device size to the page size units,
not before. That lifts the limit on the usable swap partition size
from 32GB to 256GB, that is less depressing for the modern systems.

Submitted by:   Alexander V. Chernikov <melifaro ipfw ru>
Reviewed by:    alc
Approved by:	re (bz)
MFC after:      2 weeks
This commit is contained in:
Konstantin Belousov 2011-08-22 11:18:47 +00:00
parent 5cf8ac1bc2
commit 6e903bd0d6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=225076

View File

@ -2132,16 +2132,6 @@ swaponsomething(struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strateg
swblk_t dvbase;
u_long mblocks;
/*
* If we go beyond this, we get overflows in the radix
* tree bitmap code.
*/
mblocks = 0x40000000 / BLIST_META_RADIX;
if (nblks > mblocks) {
printf("WARNING: reducing size to maximum of %lu blocks per swap unit\n",
mblocks);
nblks = mblocks;
}
/*
* nblks is in DEV_BSIZE'd chunks, convert to PAGE_SIZE'd chunks.
* First chop nblks off to page-align it, then convert.
@ -2151,6 +2141,18 @@ swaponsomething(struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strateg
nblks &= ~(ctodb(1) - 1);
nblks = dbtoc(nblks);
/*
* If we go beyond this, we get overflows in the radix
* tree bitmap code.
*/
mblocks = 0x40000000 / BLIST_META_RADIX;
if (nblks > mblocks) {
printf(
"WARNING: reducing swap size to maximum of %luMB per unit\n",
mblocks / 1024 / 1024 * PAGE_SIZE);
nblks = mblocks;
}
sp = malloc(sizeof *sp, M_VMPGDATA, M_WAITOK | M_ZERO);
sp->sw_vp = vp;
sp->sw_id = id;