|
|
1.1 root 1: /* dsksync.c - dsksync */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <proc.h>
6: #include <disk.h>
7:
8: /*------------------------------------------------------------------------
9: * dsksync -- wait for all outstanding disk requests before returning
10: *------------------------------------------------------------------------
11: */
12: dsksync(devptr)
13: struct devsw *devptr;
14: {
15: struct dreq *drptr, *p, *q;
16: int stat;
17:
18: if ( (q=(devptr->dvioblk)->dreqlst) == DRNULL )
19: return(OK);
20: drptr = (struct dreq *) getbuf(dskrbp);
21: drptr->drdba = 0;
22: drptr->drpid = currpid;
23: drptr->drbuff = NULL;
24: drptr->drop = DSYNC;
25: drptr->drnext = DRNULL;
26:
27: /* place at end of request list */
28:
29: for (p=q->drnext ; p!=DRNULL ; q=p,p=p->drnext)
30: ;
31: q->drnext = drptr;
32: drptr->drstat = SYSERR;
33: suspend(currpid);
34: stat = drptr->drstat;
35: freebuf(drptr);
36: return(stat);
37: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.