Raid1源代码分析--初始化流程
初始化流程代码量比较少,也比较简单。主要是run函数。(我阅读的代码的linux内核版本是2.6.32.61)
四、初始化流程分析
run函数顾名思义,很简单这就是在RAID1开始运行时调用,进行一些初始化的操作。主要是对RAID1中的conf进行初始化。run函数在md.c的do_md_run中被调用。
run函数的具体流程
0.传入参数mddev就是指RAID1所处的MD设备。
1. 定义相关变量。
1.1 定义conf指针,类型为raid1_private_data_s,是raid1中的重要私有数据结构。
1.2 定义rdev指针为组成该MD设备的disk指针,其类型为mdk_rdev_t。
2. 检查mddev->level是否为1。如果为1,则是使用的disk mirror技术,也就是raid1,继续下面的流程。
3. 检查reshape_position是否为MaxSector。如果相等,其实也就是不需要reshape的意思,继续下面的流程。
4. 申请raid1私有数据区conf,并且把conf结构挂接到mddev->private上,私有数据区中还申请了一个mempool,为盘阵读写缓存使用。把mddev的结构挂接在conf->poolinfo->mddev上。把conf->device_lock的结构内容挂接在mddev->queue->queue_lock。
5. 初始化私有数据区,包括:
5.1 使用MD信息对盘阵中的磁盘rdev赋值。
其中conf->mirrors为mirror_info类型的指针构成的数组的首地址。
根据conf->mirrors = kzalloc (sizeof(struct mirror_info) *mddev->raid_disks, GFP_KERNEL);可以看出,申请了raid_disks个mirror_info结构的空间,每个mirror_info结构可以对应到一个磁盘rdev。
5.2 关联MD和raid1私有数据区。即conf->raid_disks = mddev->raid_disks;和conf->mddev = mddev;
5.3 私有数据区的锁和队列的初始化。
6. 检查盘阵中磁盘状态,如果有磁盘不存在或者磁盘和盘阵中有磁盘不处于一致状态(In_sync),则处于降级状态。如果某个磁盘不是In_sync状态,该磁盘就需要全同步(conf->fullsync = 1)。
mddev->degraded就是管理raid下所有磁盘是否降级的“累计账本”,某磁盘降级则加1。
6.1 如果所有磁盘都不正常(都为降级状态),则启动失败。
6.2 如果只有一个盘可正常工作,则设置标志禁止同步。因为只有一个就没有可参照的同步磁盘,不存在同步说法。(mddev->recovery_cp = MaxSector;)
7. 找到第一个可用的磁盘记录在conf->last_used 中。(读均衡的时候会用到)
8. 注册守护进程。
9. 注册unplug回调。
10.注册拥塞处理函数。
如果说run有点构造函数的意思,那么stop函数就有析构函数的味道了。看看这个函数,都是所有的资源一一释放。stop是在md.c的do_md_stop中调用。
参考资料:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22311165&id=390818
本文来自fangpei的博客,转载请标明出处:http://www.cnblogs.com/fangpei/
Raid1源代码分析--初始化流程的更多相关文章
- Raid1源代码分析--写流程
正确写流程的总体步骤是,raid1接收上层的写bio,申请一个r1_bio结构,将其中的所有bios[]指向该bio.假设盘阵中有N块盘.然后克隆N份上层的bio结构,并分别将每个bios[]指向克隆 ...
- Raid1源代码分析--同步流程
同步的大流程是先读,后写.所以是分两个阶段,sync_request完成第一个阶段,sync_request_write完成第二个阶段.第一个阶段由MD发起(md_do_sync),第二个阶段由守护进 ...
- Raid1源代码分析--读流程(重新整理)
五.Raid1读流程分析 两个月前,刚刚接触raid1,就阅读了raid1读流程的代码,那个时候写了一篇博客.现在回过头看看,那篇的错误很多,并且很多地方没有表述清楚.所以还是决定重新写一篇以更正之前 ...
- Raid1源代码分析--读流程
这篇博文不足之处较多,重新整理了一下,链接:http://www.cnblogs.com/fangpei/p/3890873.html 我阅读的代码的linux内核版本是2.6.32.61.刚进实验室 ...
- Raid1源代码分析--开篇总述
前段时间由于一些事情耽搁了,最近将raid1方面的各流程整理了一遍.网上和书上,能找到关于MD下的raid1的文档资料比较少.决定开始写一个系列的关于raid1的博客,之前写过的一篇读流程也会在之后加 ...
- struts2源码分析-初始化流程
这一篇文章主要是记录struts.xml的初始化,还原struts2.xml的初始化流程.源码依据struts2-2.3.16.3版本. struts2初始化入口,位于web.xml中: <fi ...
- Raid1源代码分析--Barrier机制
本想就此结束Raid1的专题博客,但是觉得Raid1中自己构建的一套barrier机制的设计非常巧妙,值得单独拿出来分析.它保证了同步流程和正常读写流程的并发性,也为设备冻结/解冻(freeze/un ...
- Raid1源代码分析--一些补充
Raid1的源码的读.写.同步,在本系列博客中都已经分析完成.除了barrier机制要专门拿出来分析(下一篇会写)以外,有一些问题值得思考和注意,分析如下. 1.freeze_array是如何做的? ...
- MD中bitmap源代码分析--清除流程
bitmap的清零是由bitmap_daemon_work()来实现的.Raid1守护进程定期执行时调用md_check_recovery,然后md_check_recovery会调用bitmap_d ...
随机推荐
- IP地址分类及特殊IP地址
A类:0xxx xxxx.x.x.x/8,即1~127,共126个可用. 因0.x.x.x表示所有网络:127.x.x.x/8用作回环地址,作为测试TCP/IP协议的地址. =>其中10.x.x ...
- Web Server CA证书签名步骤和自签名测试,支持多域名
Web Server支持HTTPS访问需要两个文件,私钥和证书.私钥和证书都放在服务器上,私钥用来加密数据,证书传递给客户端.自己签名的证书在传递给浏览器的时,因为证书不被信任,所以会弹出连接不安全, ...
- javascript 中 nodeValue 、value 、text 的区别
nodeValue: 属性设置或者返回某节点的值: 也可以改变某个文本节点的值, node.nodeValue eg: 如何获取p元素里面的文本内容 <p id="demo" ...
- CheckBox的触发
遇到的问题:当Checkbox选中时触发Checked事件,使界面处于状态1,但是页面状态2时也希望checkBox处于选中状态,但是直接修改它的IsChecked属性势必会触发他的Checked事件 ...
- MAC安装SVNServer
MAC已经自带了SVN,所以,直接使用就好 1.创建svn repository svnadmin create /path/svn/pro //仓库位置,svn是svn的目录,pro是一个版本库的 ...
- Android Paint之 setXfermode PorterDuffXfermode 讲解
setXfermodePorterDuffXfermode图层混合模式android图像混合模式AvoidXfermode 尊重原创,欢迎转载,转载请注明: FROM GA_studio htt ...
- 转载——CLR标量函数、表值函数和聚合函数(UDA)
本节主要介绍使用CLR创建标量函数,表值函数和聚合函数. 所谓标量函数指的就是此函数只返回一个值.表值函数返回值是一个表.聚合函数是在select语句中使用的,用来聚合一个结果集,类似于Sum()或是 ...
- 【转】使用 Eclipse 调试 Java 程序的 10 个技巧
你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方 ...
- Ubuntu下安装android studio的时候,无法进入图形界面--/usr/lib/jdk1.8.0_60/jre/lib/i386/libawt_xawt.so: libXtst.so.6: 无法打开共享对象文件: 没有那个文件或目录
详细错误描述: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invok ...
- Red Hat Enterprise Linux x86-64 上安装 oracle 11gR2
一.以root用户登录 二.安装依赖包 #rpm -qa | grep 包名 ----查看包 binutils-2.20.51.0.2-5.11.el6 (x86_64) ...