projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
early non-blocking stuff
[unix-history]
/
usr
/
src
/
sys
/
kern
/
vfs_bio.c
diff --git
a/usr/src/sys/kern/vfs_bio.c
b/usr/src/sys/kern/vfs_bio.c
index
da6146d
..
39beb56
100644
(file)
--- a/
usr/src/sys/kern/vfs_bio.c
+++ b/
usr/src/sys/kern/vfs_bio.c
@@
-1,4
+1,4
@@
-/* vfs_bio.c 4.
17 81/03/09
*/
+/* vfs_bio.c 4.
23 81/07/25
*/
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
@@
-105,8
+105,8
@@
daddr_t blkno;
bp = getblk(dev, blkno);
if (bp->b_flags&B_DONE) {
bp = getblk(dev, blkno);
if (bp->b_flags&B_DONE) {
-#ifdef
EPAWNJ
- trace(TR_BREAD
|TR_
HIT, dev, blkno);
+#ifdef
TRACE
+ trace(TR_BREADHIT, dev, blkno);
#endif
#ifdef DISKMON
io_info.ncache++;
#endif
#ifdef DISKMON
io_info.ncache++;
@@
-116,8
+116,8
@@
daddr_t blkno;
bp->b_flags |= B_READ;
bp->b_bcount = BSIZE;
(*bdevsw[major(dev)].d_strategy)(bp);
bp->b_flags |= B_READ;
bp->b_bcount = BSIZE;
(*bdevsw[major(dev)].d_strategy)(bp);
-#ifdef
EPAWNJ
- trace(TR_BREAD
|TR_
MISS, dev, blkno);
+#ifdef
TRACE
+ trace(TR_BREADMISS, dev, blkno);
#endif
#ifdef DISKMON
io_info.nread++;
#endif
#ifdef DISKMON
io_info.nread++;
@@
-145,32
+145,32
@@
daddr_t blkno, rablkno;
bp->b_flags |= B_READ;
bp->b_bcount = BSIZE;
(*bdevsw[major(dev)].d_strategy)(bp);
bp->b_flags |= B_READ;
bp->b_bcount = BSIZE;
(*bdevsw[major(dev)].d_strategy)(bp);
-#ifdef
EPAWNJ
- trace(TR_BREAD
|TR_
MISS, dev, blkno);
+#ifdef
TRACE
+ trace(TR_BREADMISS, dev, blkno);
#endif
#ifdef DISKMON
io_info.nread++;
#endif
u.u_vm.vm_inblk++; /* pay for read */
}
#endif
#ifdef DISKMON
io_info.nread++;
#endif
u.u_vm.vm_inblk++; /* pay for read */
}
-#ifdef
EPAWNJ
+#ifdef
TRACE
else
else
- trace(TR_BREAD
|TR_
HIT, dev, blkno);
+ trace(TR_BREADHIT, dev, blkno);
#endif
}
if (rablkno && !incore(dev, rablkno)) {
rabp = getblk(dev, rablkno);
if (rabp->b_flags & B_DONE) {
brelse(rabp);
#endif
}
if (rablkno && !incore(dev, rablkno)) {
rabp = getblk(dev, rablkno);
if (rabp->b_flags & B_DONE) {
brelse(rabp);
-#ifdef
EPAWNJ
- trace(TR_BREAD
|TR_HIT|TR_
RA, dev, blkno);
+#ifdef
TRACE
+ trace(TR_BREAD
HIT
RA, dev, blkno);
#endif
} else {
rabp->b_flags |= B_READ|B_ASYNC;
rabp->b_bcount = BSIZE;
(*bdevsw[major(dev)].d_strategy)(rabp);
#endif
} else {
rabp->b_flags |= B_READ|B_ASYNC;
rabp->b_bcount = BSIZE;
(*bdevsw[major(dev)].d_strategy)(rabp);
-#ifdef
EPAWNJ
- trace(TR_BREAD
|TR_MISS|TR_
RA, dev, rablock);
+#ifdef
TRACE
+ trace(TR_BREAD
MISS
RA, dev, rablock);
#endif
#ifdef DISKMON
io_info.nreada++;
#endif
#ifdef DISKMON
io_info.nreada++;
@@
-201,8
+201,8
@@
register struct buf *bp;
#endif
if ((flag&B_DELWRI) == 0)
u.u_vm.vm_oublk++; /* noone paid yet */
#endif
if ((flag&B_DELWRI) == 0)
u.u_vm.vm_oublk++; /* noone paid yet */
-#ifdef
EPAWNJ
- trace(TR_BWRITE, bp->b_dev,
dbtofsb(bp->b_blkno)
);
+#ifdef
TRACE
+ trace(TR_BWRITE, bp->b_dev,
bp->b_blkno
);
#endif
(*bdevsw[major(bp->b_dev)].d_strategy)(bp);
if ((flag&B_ASYNC) == 0) {
#endif
(*bdevsw[major(bp->b_dev)].d_strategy)(bp);
if ((flag&B_ASYNC) == 0) {
@@
-390,8
+390,8
@@
daddr_t blkno;
bwrite(bp);
goto loop;
}
bwrite(bp);
goto loop;
}
-#ifdef
EPAWNJ
- trace(TR_BRELSE, bp->b_dev,
dbtofsb(bp->b_blkno)
);
+#ifdef
TRACE
+ trace(TR_BRELSE, bp->b_dev,
bp->b_blkno
);
#endif
bp->b_flags = B_BUSY;
bp->b_back->b_forw = bp->b_forw;
#endif
bp->b_flags = B_BUSY;
bp->b_back->b_forw = bp->b_forw;
@@
-432,8
+432,8
@@
loop:
bwrite(bp);
goto loop;
}
bwrite(bp);
goto loop;
}
-#ifdef
EPAWNJ
- trace(TR_BRELSE, bp->b_dev,
dbtofsb(bp->b_blkno)
);
+#ifdef
TRACE
+ trace(TR_BRELSE, bp->b_dev,
bp->b_blkno
);
#endif
bp->b_flags = B_BUSY|B_INVAL;
bp->b_back->b_forw = bp->b_forw;
#endif
bp->b_flags = B_BUSY|B_INVAL;
bp->b_back->b_forw = bp->b_forw;
@@
-499,10
+499,11
@@
register struct buf *bp;
if (bp->b_flags & B_ERROR)
panic("IO err in push");
s = spl6();
if (bp->b_flags & B_ERROR)
panic("IO err in push");
s = spl6();
- cnt.v_pgout++;
bp->av_forw = bclnlist;
bp->b_bcount = swsize[bp - swbuf];
bp->b_pfcent = swpf[bp - swbuf];
bp->av_forw = bclnlist;
bp->b_bcount = swsize[bp - swbuf];
bp->b_pfcent = swpf[bp - swbuf];
+ cnt.v_pgout++;
+ cnt.v_pgpgout += bp->b_bcount / NBPG;
bclnlist = bp;
if (bswlist.b_flags & B_WANTED)
wakeup((caddr_t)&proc[2]);
bclnlist = bp;
if (bswlist.b_flags & B_WANTED)
wakeup((caddr_t)&proc[2]);
@@
-596,6
+597,9
@@
swap(p, dblkno, addr, nbytes, rdflg, flag, dev, pfcent)
swpf[bp - swbuf] = pfcent;
swsize[bp - swbuf] = nbytes;
}
swpf[bp - swbuf] = pfcent;
swsize[bp - swbuf] = nbytes;
}
+#ifdef TRACE
+ trace(TR_SWAPIO, dev, bp->b_blkno);
+#endif
(*bdevsw[major(dev)].d_strategy)(bp);
if (flag & B_DIRTY) {
if (c < nbytes)
(*bdevsw[major(dev)].d_strategy)(bp);
if (flag & B_DIRTY) {
if (c < nbytes)
@@
-715,7
+719,7
@@
unsigned (*mincnt)();
bp->b_error = 0;
bp->b_proc = u.u_procp;
bp->b_un.b_addr = u.u_base;
bp->b_error = 0;
bp->b_proc = u.u_procp;
bp->b_un.b_addr = u.u_base;
- while (u.u_count != 0
&& bp->b_error==0
) {
+ while (u.u_count != 0) {
bp->b_flags = B_BUSY | B_PHYS | rw;
bp->b_dev = dev;
bp->b_blkno = u.u_offset >> PGSHIFT;
bp->b_flags = B_BUSY | B_PHYS | rw;
bp->b_dev = dev;
bp->b_blkno = u.u_offset >> PGSHIFT;
@@
-736,6
+740,8
@@
unsigned (*mincnt)();
bp->b_un.b_addr += c;
u.u_count -= c;
u.u_offset += c;
bp->b_un.b_addr += c;
u.u_count -= c;
u.u_offset += c;
+ if (bp->b_flags&B_ERROR)
+ break;
}
bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS);
u.u_count = bp->b_resid;
}
bp->b_flags &= ~(B_BUSY|B_WANTED|B_PHYS);
u.u_count = bp->b_resid;