X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/f86df66c1575304c08a6fd0716bcfdba12f5d593..41888f1633c1339d2f01b12ee2799c96530262dd:/usr/src/sys/kern/subr_rmap.c.sav diff --git a/usr/src/sys/kern/subr_rmap.c.sav b/usr/src/sys/kern/subr_rmap.c.sav index a84937330d..52e646af31 100644 --- a/usr/src/sys/kern/subr_rmap.c.sav +++ b/usr/src/sys/kern/subr_rmap.c.sav @@ -1,4 +1,4 @@ -/* subr_rmap.c.sav 3.2 %G% */ +/* subr_rmap.c.sav 3.3 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -23,11 +23,23 @@ struct map *mp; { register int a; register struct map *bp; + swblk_t first, rest; - if (size <= 0) + if (size <= 0 || mp == swapmap && size > DMMAX) panic("malloc"); for (bp=mp; bp->m_size; bp++) { if (bp->m_size >= size) { + if (mp == swapmap && + (first = DMMAX - bp->m_addr%DMMAX) < bp->m_size) { + if (bp->m_size - first < size) + continue; + a = bp->m_addr + first; + rest = bp->m_size - first - size; + bp->m_size = first; + if (rest) + mfree(swapmap, rest, a+size); + return (a); + } a = bp->m_addr; bp->m_addr += size; if ((bp->m_size -= size) == 0) {