块设备请求队列:
struct request_queue {
struct list_head queue_head; //待处理请求的链表,请求队列中的请求用链表组织在一起
struct request *last_merge; //指向队列中首先可能合并的请求描述符
struct elevator_queue *elevator;//指向elevator对象的指针(电梯算法)
struct request_list root_rl; //为分配请求描述符(struct request)所使用的数据结构
request_fn_proc *request_fn;//实现驱动程序的策略例程入口点的方法,由他处理队列中请求
make_request_fn *make_request_fn;//将一个新请求插入请求队列时调用的方法
prep_rq_fn *prep_rq_fn; //该方法把这个处理请求的命令发送给硬件设备
.... ....
}
记录块设备(struct request_queue)中分配struct request信息的root_rl:
struct request_list {
int count[2]; //两个计数器,分别用于记录分配给同步和异步请求的请求描述符数
int starved[2]; //两个标志,分别用于标记为读或写请求的分配是否失败
mempool_t *rq_pool; //一个指针