加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux内核md源代码解读 四 命令字RUN_ARRAY的处理过程 - Linux系统

发布时间:2014-03-24 10:46:21 所属栏目:Linux 来源:站长网
导读:运行阵列意味着阵列经历从无到有,建立了作为一个raid应有的属性(如同步重建),并为随后的读写做好的铺垫。那么运行阵列的时候到底做了哪些事情,让原来的磁
运行阵列意味着阵列经历从无到有,建立了作为一个raid应有的属性(如同步重建),并为随后的读写做好的铺垫。那么运行阵列的时候到底做了哪些事情,让原来的磁盘像变形金刚一样组成一个新的巨无霸。现在就来看阵列运行处理流程:

5158 static int do_md_run(struct mddev *mddev)  
5159 {  
5160         int err;  
5161   
5162         err = md_run(mddev);  
5163         if (err)  
5164                 goto out;  
5165         err = bitmap_load(mddev);  
5166         if (err) {  
5167                 bitmap_destroy(mddev);  
5168                 goto out;  
5169         }  
5170   
5171         md_wakeup_thread(mddev->thread);  
5172         md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */5173   
5174         set_capacity(mddev->gendisk, mddev->array_sectors);  
5175         revalidate_disk(mddev->gendisk);  
5176         mddev->changed = 1;  
5177         kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);  
5178 out:  
5179         return err;  
5180 }

如果说运行阵列的过程是一本书,那么这个函数就是这本书的目录,每一个目录中都隐含着一个深刻的故事。

5162行,md_run运行阵列,这个函数比较长,我们按一段一段来分析:

4956 int md_run(struct mddev *mddev)  
4957 {  
4958         int err;  
4959         struct md_rdev *rdev;  
4960         struct md_personality *pers;  
4961   
4962         if (list_empty(&mddev->disks))  
4963                 /* cannot run an array with no devices.. */
4964                 return -EINVAL;  
4965   
4966         if (mddev->pers)  
4967                 return -EBUSY;  
4968         /* Cannot run until previous stop completes properly */
4969         if (mddev->sysfs_active)  
4970                 return -EBUSY;  
4971   
4972         /* 
4973          * Analyze all RAID superblock(s) 
4974          */
4975         if (!mddev->raid_disks) {  
4976                 if (!mddev->persistent)  
4977                         return -EINVAL;  
4978                 analyze_sbs(mddev);  
4979         }

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!