这些文章已经写了好几年了,可能已经过时了。在MSN space和QQzone几经辗转之后,我想也许这些技术文章还是放在搞技术的博客中更能帮助人。于是做了一个艰难的决定,把这些文章一篇篇搬过来!绝对是原创的。
一次简单的读处理
这一切都是从make_request开始的。make_request的其中一个参数就是bio,至于一个bio是怎么送到make_request中的,这与块设备驱动内容相关,具体内容可以查看LDD3和ULK3,你或者可以从block/ll_rw_blk.c的generic_make_request函数开始寻找答案。
在make_request中,我们首先需要知道这个bio是要读哪个stripe的哪个dev。这些信息从raid5_compute_sector函数中获得。这两个信息就被放在new_sector和dd_idx中,根据new_sector信息,我们调用get_active_stripe取出一个 stripe_head即sh来处理这次读请求,根据dd_idx信息,