zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    [Effective C++, 学习总结] 01 视C++为一个语言联邦
    【原创】从“心”开始
    [C++, Basic, 02] 控制对象初始化与析构的顺序
    电信PPPoE拨号失败,获取不到IP
    IPV6学习笔记
    win10提示目前无法访问SmartScreen
    IBM服务器进入IMM
    python把文字转成语音
    python爬虫获取贴吧图片
    ibm x3550更换主板后无法加载系统引导
  • 原文地址:https://www.cnblogs.com/fangpei/p/3856445.html
Copyright © 2011-2022 走看看