code:bdwrite - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 对 指定缓存块 进行延迟写
- 若 该块对应设备 为磁带设备,进行异步写,而不是延迟写
- 共传入一个参数 bp
- bp : 指定的缓存块的管理结构
4827
4828 /*
4829 * Release the buffer, marking it so that if it is grabbed
4830 * for another purpose it will be written out before being
4831 * given up (e.g. when writing a partial block where it is
4832 * assumed that another write for the same block will soon
4833 * follow). This can’t be done for magtape, since writes
4834 * must be done in the same order as requested.
4835 */
4836 bdwrite(bp)
4837 struct buf *bp;
4838 {
4839 register struct buf *rbp;
4840 register struct devtab *dp;
4841
4842 rbp = bp;
4843 dp = bdevsw[rbp->b_dev.d_major].d_tab;
4844 if (dp == &tmtab || dp == &httab)
- dp 指向 该块对应的设备的struct devtab管理结构
4845 bawrite(rbp);
4846 else {
- 若 对应设备为磁带设备,则异步写
4847 rbp->b_flags =| B_DELWRI | B_DONE;
4848 brelse(rbp);
4849 }
- 将 该块 置 B_DELWRI 和 B_DONE 标志
- 释放该块(将该块置为可用,写设备操作将推后执行)
4850 }
4851 /* ------------------------- */