-/* kern_physio.c 3.2 %H% */
+/* kern_physio.c 3.8 %G% */
-int distrust = 1; /* TEST */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/dir.h"
splx(s);
}
-/* HASHING IS A GUN LIKE CHANGE, THIS IS THE SAFETY */
-struct buf *
-oincore(dev, blkno)
- dev_t dev;
- daddr_t blkno;
-{
- register struct buf *bp;
- register struct buf *dp;
- register int dblkno = fsbtodb(blkno);
-
- dp = bdevsw[major(dev)].d_tab;
- for (bp=dp->b_forw; bp != dp; bp = bp->b_forw)
- if (bp->b_blkno==dblkno && bp->b_dev==dev &&
- bp >= buf && bp < &buf[NBUF])
- return (bp);
- return ((struct buf *)0);
-}
-
/*
* See if the block is associated with some buffer
* (mainly to avoid getting hung up on a wait in breada)
for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
bp = &buf[bp->b_hlink])
- if (bp->b_blkno == dblkno && bp->b_dev == dev) {
- if (distrust)
- if (oincore(dev, blkno) != bp) /* TEST */
- panic("incore 1"); /* TEST */
+ if (bp->b_blkno == dblkno && bp->b_dev == dev)
return (1);
- }
- if (distrust)
- if (oincore(dev, blkno)) /* TEST */
- panic("incore 2"); /* TEST */
return (0);
}
register int dblkno = fsbtodb(blkno);
loop:
- VOID spl0();
+ (void) spl0();
for (bp = &buf[bufhash[BUFHASH(blkno)]]; bp != &buf[-1];
bp = &buf[bp->b_hlink]) {
if (bp->b_blkno != dblkno || bp->b_dev != dev)
continue;
- if (distrust)
- if (bp != oincore(dev, blkno)) /* TEST */
- panic("getblk 1"); /* TEST */
- VOID spl6();
+ (void) spl6();
if (bp->b_flags&B_BUSY) {
bp->b_flags |= B_WANTED;
sleep((caddr_t)bp, PRIBIO+1);
goto loop;
}
- VOID spl0();
+ (void) spl0();
#ifdef DISKMON
i = 0;
dp = bp->av_forw;
bp->b_flags |= B_CACHE;
return(bp);
}
- if (distrust)
- if (oincore(dev, blkno)) /* TEST */
- panic("getblk 2"); /* TEST */
if (major(dev) >= nblkdev)
panic("blkdev");
dp = bdevsw[major(dev)].d_tab;
if (dp == NULL)
panic("devtab");
- VOID spl6();
+ (void) spl6();
if (bfreelist.av_forw == &bfreelist) {
bfreelist.b_flags |= B_WANTED;
sleep((caddr_t)&bfreelist, PRIBIO+1);
struct buf *
geteblk()
{
- register struct buf *bp, *dp, *ep;
- register int i, x;
+ register struct buf *bp, *dp;
loop:
- VOID spl6();
+ (void) spl6();
while (bfreelist.av_forw == &bfreelist) {
bfreelist.b_flags |= B_WANTED;
sleep((caddr_t)&bfreelist, PRIBIO+1);
}
- VOID spl0();
+ (void) spl0();
dp = &bfreelist;
bp = bfreelist.av_forw;
notavail(bp);
register struct buf *bp;
{
- VOID spl6();
+ (void) spl6();
while ((bp->b_flags&B_DONE)==0)
sleep((caddr_t)bp, PRIBIO);
- VOID spl0();
+ (void) spl0();
geterror(bp);
}
int p2dp;
register struct pte *dpte, *vpte;
- VOID spl6();
+ (void) spl6();
while (bswlist.av_forw == NULL) {
bswlist.b_flags |= B_WANTED;
sleep((caddr_t)&bswlist, PSWP+1);
}
bp = bswlist.av_forw;
bswlist.av_forw = bp->av_forw;
- VOID spl0();
+ (void) spl0();
bp->b_flags = B_BUSY | B_PHYS | rdflg | flag;
if ((bp->b_flags & (B_DIRTY|B_PGIN)) == 0)
bp->b_bcount = c;
bp->b_blkno = dblkno;
bp->b_dev = dev;
- if (dev == swapdev)
- bp->b_blkno += swplo;
(*bdevsw[major(dev)].d_strategy)(bp);
if (flag & B_DIRTY) {
if (c < nbytes)
swpf[bp - swbuf] = pfcent;
return;
}
- VOID spl6();
+ (void) spl6();
while((bp->b_flags&B_DONE)==0)
sleep((caddr_t)bp, PSWP);
- VOID spl0();
+ (void) spl0();
bp->b_un.b_addr += c;
bp->b_flags &= ~B_DONE;
if (bp->b_flags & B_ERROR) {
nbytes -= c;
dblkno += btoc(c);
}
- VOID spl6();
+ (void) spl6();
bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS|B_PAGET|B_UAREA|B_DIRTY);
bp->av_forw = bswlist.av_forw;
bswlist.av_forw = bp;
wakeup((caddr_t)&bswlist);
wakeup((caddr_t)&proc[2]);
}
- VOID spl0();
+ (void) spl0();
}
/*
* done by user) after killing it so noone will try
* to swap it out.
*/
- psignal(p, SIGKIL);
+ psignal(p, SIGKILL);
p->p_flag |= SULOCK;
}
register struct buf *bp;
loop:
- VOID spl6();
+ (void) spl6();
for (bp = bfreelist.av_forw; bp != &bfreelist; bp = bp->av_forw) {
if (bp->b_flags&B_DELWRI && (dev == NODEV||dev==bp->b_dev)) {
bp->b_flags |= B_ASYNC;
goto loop;
}
}
- VOID spl0();
+ (void) spl0();
}
/*
u.u_error = EFAULT;
return;
}
- VOID spl6();
+ (void) spl6();
while (bp->b_flags&B_BUSY) {
bp->b_flags |= B_WANTED;
sleep((caddr_t)bp, PRIBIO+1);
u.u_procp->p_flag |= SPHYSIO;
vslock(a = bp->b_un.b_addr, c);
(*strat)(bp);
- VOID spl6();
+ (void) spl6();
while ((bp->b_flags&B_DONE) == 0)
sleep((caddr_t)bp, PRIBIO);
vsunlock(a, c, rw);
u.u_procp->p_flag &= ~SPHYSIO;
if (bp->b_flags&B_WANTED)
wakeup((caddr_t)bp);
- VOID spl0();
+ (void) spl0();
bp->b_un.b_addr += c;
u.u_count -= c;
u.u_offset += c;