这些文章已经写了好几年了,可能已经过时了。在MSN space和QQzone几经辗转之后,我想也许这些技术文章还是放在搞技术的博客中更能帮助人。于是做了一个艰难的决定,把这些文章一篇篇搬过来!绝对是原创的。
bio 与 stripe_head
在linux块设备驱动中有一个非常重要的数据结构那就是bio。bio取代了2.4内核中的buffer head来表示块设备的I/O请求,以获得更大的性能和灵活性。简单来说,bio包含了一个块设备完成一次I/O请求所需要的一切信息。其中跟RAID层相关的几个重要字段是:
struct block_device *bi_bdev; /* 指向实际执行I/O的设备 */
sector_t bi_sector; /* I/O的起始扇区 */
unsigned int bi_size; /* I/O的大小 */
unsigned long bi_rw; /* 区分读,写*/
bio_end_io_t *bi_end_io; /* 指定I/O结束的callback函数 */
struct bio_vec *bi_io_vec; /* 这是一个数组,组织了参与I/O的page */
如果在今后的讨论中