code:iodone - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 标志 缓存块与设备的读写操作完成
- 若缓存块为异步I/O,释放该块
- 若缓存块为同步I/O,则唤醒所有等待该块的进程
5014
5015 /* Mark I/O complete on a buffer, release it if i/o is
5016 * asynchronous, and wake up anyone waiting for it.
5017 */
5018 iodone(bp)
5019 struct buf *bp;
5020 {
5021 register struct buf *rbp;
5022
5023 rbp = bp;
5024 if(rbp->b_flags*B_MAP)
5025 mapfree(rbp);
5026 rbp->b_flags =| B_DONE;
- 此处为PDP11/70对应的函数,不作讨论
5027 if (rbp->b_flags&B_ASYNC)
- 置缓存块 B_DONE标志
5028 brelse(rbp);
5029 else {
- 若缓存块为异步I/O,则释放该块
5030 rbp->b_flags =& ~B_WANTED;
5031 wakeup(rbp);
5032 }
- 若缓存块为同步I/O
- 清B_WANTED标志
- 唤醒 所有等待该缓存块的进程
5033 }
5034 /* ------------------------- */