cleaned up and re-enable compaction
[unix-history] / usr / src / sys / kern / vfs_bio.c
index a83fe78..39beb56 100644 (file)
@@ -1,4 +1,4 @@
-/*     vfs_bio.c       4.19    81/04/23        */
+/*     vfs_bio.c       4.23    81/07/25        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -202,7 +202,7 @@ register struct buf *bp;
        if ((flag&B_DELWRI) == 0)
                u.u_vm.vm_oublk++;              /* noone paid yet */
 #ifdef TRACE
        if ((flag&B_DELWRI) == 0)
                u.u_vm.vm_oublk++;              /* noone paid yet */
 #ifdef TRACE
-       trace(TR_BWRITE, bp->b_dev, dbtofsb(bp->b_blkno));
+       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) {
@@ -391,7 +391,7 @@ daddr_t blkno;
                goto loop;
        }
 #ifdef TRACE
                goto loop;
        }
 #ifdef TRACE
-       trace(TR_BRELSE, bp->b_dev, dbtofsb(bp->b_blkno));
+       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;
@@ -433,7 +433,7 @@ loop:
                goto loop;
        }
 #ifdef TRACE
                goto loop;
        }
 #ifdef TRACE
-       trace(TR_BRELSE, bp->b_dev, dbtofsb(bp->b_blkno));
+       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_flags&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;