|
|
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.