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

Source

  • 将带有延迟写标识且对应于指定设备(或NODEV)的缓存块写回该设备
  • 传入1个参数dev,为指定设备号

5223

5224 /* make sure all write-behind blocks

5225  * on dev (or NODEV for all)

5226  * are flushed out.

5227  * (from umount and update)

5228  */

5229 bflush(dev)

5230 {

5231     register struct buf *bp;

5232

5233 loop:

5234     spl6();

5235     for (bp = bfreelist.av_forw; bp != &bfreelist;

5236                              bp = bp->av_forw) {

5237           if (bp->b_flags&B_DELWRI &&

5238                     (dev == NODEV||dev == bp->b_dev)) {

  • 遍历自由队列,寻找带有延迟写标识,且其对应设备号为NODEV或是dev(函数传入参数)的缓存块
5239                     bp->b_flags =| B_ASYNC;

5240                     notavil(bp);

5241                     bwrite(bp);

  • 对于找到的缓存块,置异步写标识
  • 将其从自由队列中取出
  • 然后写回相应设备
5242                     goto loop;

5243           }

5244     }

5245     spl0();

5246 }

5247 /* ------------------------- */

Ref

Caller

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