文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>RAID1代码走读(2)-make_request

RAID1代码走读(2)-make_request

时间:2009-08-14  来源:qincp-

磁阵的用户访问请求处理函数,完成如下操作:

1.      调用md_write_start,(如果是读操作,)等待磁阵的元数据(超级块)更新完成。

2.      如果访问要求设置屏障,而设备不支持设置屏障,则立即返回。

3.      等待设备上的屏障消除。

4.      统计

5.      申请一个raid的bio,该bio中有一个数组,数组中的元素是对应各磁盘的bio。该结构下文称为raid-bio

6.      如果是读请求,则调用读均衡算法获取一个读目标,将读请求复制到该目标盘中,递交给磁盘。

7.      如果是写请求,则:

a)       对于磁阵中所有可用的盘,将raid-bio的数组中的元素指向用户bio。此时也顺便检查了磁阵中磁盘情况,如果磁阵有磁盘损坏,则设置磁阵为降级状态。

b)       如果设置了延迟写,需要将用户bio中的数据另外拷贝一份保存。

c)       根据用户bio中的标志,确定是否设置raid-bio中的barrie标志。(如果下挂的磁盘不支持barrier操作,则会返回不支持EOPNOTSUPP,在raid1_end_write_request中加以处理,具体的处理就是在守护进程中重试)

d)       对每一个磁盘,克隆一份用户bio到raid-bio数组对应元素中,并设置相关字段(bi_end_io等)。如果是延迟写,则raid-bio中的数组元素的bvec指向保存的延迟写拷贝,而不是用户bio中的pages。

e)       调用bitmap_startwrite,通知bitmap进行写数据块对应的设置。

f)        将raid-bio数组挂到设备的pending_bio_list队列中,拔出(blk_plug_device)设备(此时拔出设备似乎没有什么意思,因为MD设备用不到调度算法)。

g)       激活守护进程。

相关阅读 更多 +
排行榜 更多 +
超级摩托车特技3D

超级摩托车特技3D

赛车竞速 下载
超级汽车大乱斗

超级汽车大乱斗

赛车竞速 下载
沙漠越野车

沙漠越野车

赛车竞速 下载