linux/block/blk-core.c定义
void submit_bio(int rw, struct bio *bio)
该函数为通用块层的接口函数。
submit_bio调用generic_make_request(bio);加入到对应的请求队列。
generic_make_request循环针对一个进行的所有bio调用__generic_make_request
__generic_make_request,主要完成相关检查,分区的remap,然后调用对应请求队列的q->make_request_fn(q, bio);
请求队列的make_request_fn(q, bio),通过blk_queue_make_request进行初始化
blk_queue_make_request
void blk_queue_make_request(struct request_queue *q, make_request_fn *mfn)
floppy_queue = blk_init_queue(do_fd_request, &amiflop_lock);
blk_init_queue-》blk_init_queue_node-》blk_init_allocated_queue_node-》blk_queue_make_request(q, blk_queue_bio);
所有普通的块设备驱动,通过blk_init_queue初始化请求队列的设备。
q->make_request_fn(q, bio); 对应的是blk_queue_bio
blk_queue_bio的处理流程: