file system update orderings
[unix-history] / usr / src / sys / ufs / ffs / ufs_disksubr.c
CommitLineData
f86df66c 1/* ufs_disksubr.c 3.2 %G% */
200a8f27
BJ
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
13disksort(dp, bp)
14register 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}