|
|
1.1 ! root 1: /* dsort.c 4.1 11/9/80 */ ! 2: ! 3: /* ! 4: * generalized seek sort for disk ! 5: */ ! 6: ! 7: #include "../h/param.h" ! 8: #include "../h/systm.h" ! 9: #include "../h/buf.h" ! 10: ! 11: #define b_cylin b_resid ! 12: ! 13: disksort(dp, bp) ! 14: register struct buf *dp, *bp; ! 15: { ! 16: register struct buf *ap; ! 17: struct buf *tp; ! 18: ! 19: ap = dp->b_actf; ! 20: if(ap == NULL) { ! 21: dp->b_actf = bp; ! 22: dp->b_actl = bp; ! 23: bp->av_forw = NULL; ! 24: return; ! 25: } ! 26: tp = NULL; ! 27: for(; ap != NULL; ap = ap->av_forw) { ! 28: if ((bp->b_flags&B_READ) && (ap->b_flags&B_READ) == 0) { ! 29: if (tp == NULL) ! 30: tp = ap; ! 31: break; ! 32: } ! 33: if ((bp->b_flags&B_READ) == 0 && (ap->b_flags&B_READ)) ! 34: continue; ! 35: if(ap->b_cylin <= bp->b_cylin) ! 36: if(tp == NULL || ap->b_cylin >= tp->b_cylin) ! 37: tp = ap; ! 38: } ! 39: if(tp == NULL) ! 40: tp = dp->b_actl; ! 41: bp->av_forw = tp->av_forw; ! 42: tp->av_forw = bp; ! 43: if(tp == dp->b_actl) ! 44: dp->b_actl = bp; ! 45: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.