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