Annotation of xinu/sys/LSI/dskenq.c, revision 1.1.1.1

1.1       root        1: /* dskenq.c - dskenq */
                      2: 
                      3: #include <conf.h>
                      4: #include <kernel.h>
                      5: #include <disk.h>
                      6: 
                      7: /*------------------------------------------------------------------------
                      8:  *  dskenq  --  enqueue a disk request and start I/O if disk not busy
                      9:  *------------------------------------------------------------------------
                     10:  */
                     11: dskenq(drptr, dsptr)
                     12:        struct  dreq    *drptr;
                     13:        struct  dsblk   *dsptr;
                     14: {
                     15:        struct  dreq    *p, *q;         /* q follows p through requests */
                     16:        DBADDR  block;
                     17:        int     st;
                     18: 
                     19:        if ( (q=dsptr->dreqlst) == DRNULL ) {
                     20:                dsptr->dreqlst = drptr;
                     21:                drptr->drnext = DRNULL;
                     22:                dskstrt(dsptr);
                     23:                return(DONQ);
                     24:        }
                     25:        block = drptr->drdba;
                     26:        for (p = q->drnext ; p != DRNULL ; q=p,p=p->drnext) {
                     27:                if (p->drdba==block && (st=dskqopt(p, q, drptr)!=SYSERR))
                     28:                                return(st);
                     29:                if ( (q->drdba <= block && block < p->drdba) ||
                     30:                     (q->drdba >= block && block > p->drdba)   ) {
                     31:                        drptr->drnext = p;
                     32:                        q->drnext = drptr;
                     33:                        return(DONQ);
                     34:                }
                     35:        }
                     36:        drptr->drnext = DRNULL;
                     37:        q->drnext = drptr;
                     38:        return(DONQ);
                     39: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.