linux内核奇遇记之md源代码解读之七阵列同步一
linux内核奇遇记之md源代码解读之七阵列同步一转载请注明出处:http://blog.csdn.net/liumangxiong阵列同步在md_do_sync,那么入口在哪里呢?就是说阵列同步触发点在哪里呢?听说过md_check_recovery吧,但这还不是同步的入口点。那raid5d函数是入口点吧?如果要认真分析起来还不算是。真正的同步入口点在do_md_run函数,就是在运行阵列run函数之后,有这么一行:
7816 if (mddev->pers->sync_request) {7817 if (spares) {...7823 }7824 mddev->sync_thread = md_register_thread(md_do_sync,7825 mddev,7826 "resync");7827 if (!mddev->sync_thread) {...7837 } else7838 md_wakeup_thread(mddev->sync_thread);7839 sysfs_notify_dirent_safe(mddev->sysfs_action);7840 md_new_event(mddev);7841 }...7850 mddev_unlock(mddev);7851 }
7816行,对于没有同步线程的阵列来说,就没什么事情了。7824行,启动同步线程。7838行,唤醒同步线程。7839行,更新同步状态。这时主线程调用md_check_recovery函数就已经结束了,启动的同步线程来做同步的具体事宜。那么为什么主线程自己不做同步而另起一个线程做同步呢?不妨想想现在事情都放在主线程里做有什么负面影响?当主线程在同步的时候是不是就不能很及时响应正常数据流了。而且同步和数据流本来就是两件差异很大的事情。本小节只是介绍到同步入口,同步过程在下一小节开始阅读。转载请注明出处:http://blog.csdn.net/liumangxiong