code:bdwrite - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

  • 对 指定缓存块 进行延迟写
    • 若 该块对应设备 为磁带设备,进行异步写,而不是延迟写
  • 共传入一个参数 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)

4845          bawrite(rbp);

  • 若 对应设备为磁带设备,则异步写
4846     else {

4847          rbp->b_flags =| B_DELWRI | B_DONE;

4848          brelse(rbp);

  • 将 该块 置 B_DELWRI 和 B_DONE 标志
  • 释放该块(将该块置为可用,写设备操作将推后执行)
4849     }

4850 }

4851 /* ------------------------- */

Ref

Caller

⚠️ **GitHub.com Fallback** ⚠️