--- Net2/vm/swap_pager.c 2018/04/24 18:03:57 1.1.1.1 +++ Net2/vm/swap_pager.c 2018/04/24 18:14:58 1.1.1.5 @@ -37,7 +37,8 @@ * * from: Utah $Hdr: swap_pager.c 1.4 91/04/30$ * - * @(#)swap_pager.c 7.4 (Berkeley) 5/7/91 + * from: @(#)swap_pager.c 7.4 (Berkeley) 5/7/91 + * swap_pager.c,v 1.6.2.1 1993/07/31 12:20:49 cgd Exp */ /* @@ -74,7 +75,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 +346,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 @@ -354,6 +356,7 @@ swap_pager_dealloc(pager) #endif rmfree(swapmap, swp->sw_bsize, bp->swb_block); } + splx(s); /* * Free swap management resources */ @@ -515,6 +518,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,6 +533,7 @@ 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) { @@ -539,6 +544,7 @@ swap_pager_io(swp, m, flags) printf("swpg_io: rmalloc of %x failed\n", swp->sw_bsize); #endif + splx(s); return(VM_PAGER_FAIL); } #ifdef DEBUG @@ -547,6 +553,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 @@ -565,7 +572,7 @@ swap_pager_io(swp, m, flags) m, flags); #endif bswlist.b_flags |= B_WANTED; - sleep((caddr_t)&bswlist, PSWP+1); + tsleep((caddr_t)&bswlist, PSWP+1, "swpgio", 0); } bp = bswlist.av_forw; bswlist.av_forw = bp->av_forw; @@ -573,6 +580,8 @@ swap_pager_io(swp, m, flags) bp->b_flags = B_BUSY | (flags & B_READ); bp->b_proc = &proc0; /* XXX (but without B_PHYS set this is ok) */ bp->b_un.b_addr = (caddr_t)kva; + if (!swb->swb_block) + panic("swap_pager_io: page to first block\n"); bp->b_blkno = swb->swb_block + btodb(off); VHOLD(swapdev_vp); bp->b_vp = swapdev_vp; @@ -652,7 +661,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 +862,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 +883,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)