/* * generalized seek sort for disk */ #include "sys/param.h" #include "sys/config.h" #include "sys/types.h" #include "sys/sysmacros.h" #include "sys/systm.h" #include "sys/dir.h" #include "sys/signal.h" #include "sys/user.h" #include "sys/errno.h" #include "sys/utsname.h" #include "sys/buf.h" #include "sys/elog.h" #include "sys/erec.h" #include "sys/iobuf.h" #define b_cylin b_resid disksort(dp, bp) register struct iobuf *dp; register struct buf *bp; { register struct buf *ap; struct buf *tp; ap = dp->b_actf; if(ap == NULL) { dp->b_actf = bp; dp->b_actl = bp; bp->av_forw = NULL; return; } tp = NULL; for(; ap != NULL; ap = ap->av_forw) { if ((bp->b_flags&B_READ) && (ap->b_flags&B_READ) == 0) { if (tp == NULL) tp = ap; break; } if ((bp->b_flags&B_READ) == 0 && (ap->b_flags&B_READ)) continue; if(ap->b_cylin <= bp->b_cylin) if(tp == NULL || ap->b_cylin >= tp->b_cylin) tp = ap; } if(tp == NULL) tp = dp->b_actl; bp->av_forw = tp->av_forw; tp->av_forw = bp; if(tp == dp->b_actl) dp->b_actl = bp; }