与请求处理相关的几个数据结构:
struct request_queue
struct request
struct bio
一个bio对应上层传递的I/O请求,I/O调度算法会把多个bio合并为一个request,多个request又构成了request_queue,request_queue是上节提到的gendisk结构中的成员。
bio的定义:
struct bio {
struct bio *bi_next; /* request queue link */
struct block_device *bi_bdev;
unsigned long bi_flags; /* status, command, etc */
unsigned long bi_rw; /* bottom bits READ/WRITE,
* top bits priority
*/
struct bvec_iter bi_iter;
/* Number of segments in this BIO after
* physical address coalescing is performed.
*/
unsigned int bi_phys_segments;
...
struct bio_vec *bi_io_vec; /* the actual vec list */
struct bio_set *bi_pool;
...
}
其中bio_vec用来描述与bio对应的内存,这些bio_vec可能不在同一数据页中,所以要用向量(bi_io_vec)来表示,bio_vec的定义为:
struct bio_vec {
struct page *bv_page;
unsigned int bv_len;
unsigned int bv_offset;
};
bvec_iter是用来遍历bio的迭代器,记录了当前bi_io_vec的