这一节讲述raid5模块中处理读写流程。这个过程很复杂,最关键的函数就是handle_stripe,处理一次读或写都会多次调用这个函数才能完成。当然,这个函数也是raid5模块的一个核心函数,他还负责同步,重建,以及扩展的实现。在分析之前,我们需要准备一些预备知识:
一、条带:我们知道,raid5是以条带为基本单位来存取数据的。如下图所示:
raid5还有其它中数据分布方式,这里只列出一种。图中的block0,block1,block2等这些数据块在逻辑上是连续的。
值得注意的是,MD中raid5处理数据的最小单位是一个由大小4KB组成的小条带,即一个页大小,并不是一次处理一个block大小的条带。以后出现的条带均指的是这个由4KB组成的小条带。这个数据结构如下: