--- Net2/vm/swap_pager.c 2018/04/24 18:03:57 1.1.1.1 +++ Net2/vm/swap_pager.c 2018/04/24 18:09:23 1.1.1.4 @@ -37,8 +37,17 @@ * * from: Utah $Hdr: swap_pager.c 1.4 91/04/30$ * + * + * PATCHES MAGIC LEVEL PATCH THAT GOT US HERE + * -------------------- ----- ---------------------- + * CURRENT PATCH LEVEL: 1 00075 + * -------------------- ----- ---------------------- + * + * 22 Jan 1993 Bruce Evans Fixed unmatched spl calls + * * @(#)swap_pager.c 7.4 (Berkeley) 5/7/91 */ +static char rcsid[] = "$Header: /var/lib/cvsd/net2/Net2/vm/swap_pager.c,v 1.1.1.4 2018/04/24 18:09:23 root Exp $"; /* * Quick hack to page to dedicated partition(s). @@ -53,12 +62,12 @@ #include "param.h" #include "proc.h" #include "buf.h" -#include "map.h" #include "systm.h" #include "specdev.h" #include "vnode.h" #include "malloc.h" #include "queue.h" +#include "rlist.h" #include "vm_param.h" #include "queue.h" @@ -74,7 +83,7 @@ #define MAXDADDRS 64 /* max # of disk addrs for fixed allocations */ #ifdef DEBUG -int swpagerdebug = 0x100; +int swpagerdebug = 0 /*0x100*/; #define SDB_FOLLOW 0x001 #define SDB_INIT 0x002 #define SDB_ALLOC 0x004 @@ -345,6 +354,7 @@ swap_pager_dealloc(pager) /* * Free left over swap blocks */ + s = splbio(); for (i = 0, bp = swp->sw_blocks; i < swp->sw_nblocks; i++, bp++) if (bp->swb_block) { #ifdef DEBUG @@ -352,8 +362,10 @@ swap_pager_dealloc(pager) printf("swpg_dealloc: blk %x\n", bp->swb_block); #endif - rmfree(swapmap, swp->sw_bsize, bp->swb_block); + rlist_free(&swapmap, (unsigned)bp->swb_block, + (unsigned)bp->swb_block + swp->sw_bsize - 1); } + splx(s); /* * Free swap management resources */ @@ -515,6 +527,7 @@ swap_pager_io(swp, m, flags) #endif return(VM_PAGER_FAIL); } + s = splbio(); swb = &swp->sw_blocks[ix]; off = off % dbtob(swp->sw_bsize); if (flags & B_READ) { @@ -529,16 +542,23 @@ swap_pager_io(swp, m, flags) m->offset, m->object->paging_offset); #endif /* XXX: should we zero page here?? */ + splx(s); return(VM_PAGER_FAIL); } } else if (swb->swb_block == 0) { +#ifdef old swb->swb_block = rmalloc(swapmap, swp->sw_bsize); if (swb->swb_block == 0) { +#else + if (!rlist_alloc(&swapmap, (unsigned)swp->sw_bsize, + (unsigned *)&swb->swb_block)) { +#endif #ifdef DEBUG if (swpagerdebug & SDB_FAIL) printf("swpg_io: rmalloc of %x failed\n", swp->sw_bsize); #endif + splx(s); return(VM_PAGER_FAIL); } #ifdef DEBUG @@ -547,6 +567,7 @@ swap_pager_io(swp, m, flags) swp->sw_blocks, swb->swb_block, ix); #endif } + splx(s); /* * Allocate a kernel virtual address and initialize so that PTE @@ -652,7 +673,7 @@ swap_pager_io(swp, m, flags) --swap_pager_poip; #endif rv = (bp->b_flags & B_ERROR) ? VM_PAGER_FAIL : VM_PAGER_OK; - bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS|B_PAGET|B_UAREA|B_DIRTY); + bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS|B_DIRTY); bp->av_forw = bswlist.av_forw; bswlist.av_forw = bp; if (bp->b_vp) @@ -853,8 +874,10 @@ swap_pager_iodone(bp) spc->spc_flags &= ~SPC_BUSY; spc->spc_flags |= SPC_DONE; - if (bp->b_flags & B_ERROR) + if (bp->b_flags & B_ERROR) { spc->spc_flags |= SPC_ERROR; +printf("error %d blkno %d sz %d ", bp->b_error, bp->b_blkno, bp->b_bcount); + } spc->spc_bp = NULL; blk = bp->b_blkno; @@ -872,7 +895,7 @@ swap_pager_iodone(bp) thread_wakeup((int)spc->spc_swp); } - bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS|B_PAGET|B_UAREA|B_DIRTY); + bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS|B_DIRTY); bp->av_forw = bswlist.av_forw; bswlist.av_forw = bp; if (bp->b_vp)