virtio-blk初始化
source code: 3.19.3
(ps:如有错误请大家留言指正,每晚我会查看一下;若有幸被转载或引用请注明下,谢谢)
对于virtio-blk设备,virtio-bus的probe回调函数会调用对应驱动的probe回调函数,这里就是virtblk_probe函数来进行初始化操作。当此函数执行完成的时候,virtio-blk相关的数据结构也就建立完成了。
先来看看完成初始化之后的数据结构关系图(有些域未标出):
上图主要是virtio中定义的数据结构,virtio-blk使用了blk-mq块驱动模型(在图中没有画出),通过gendisk的request_queue结构的域queue、virtio-blk结构的域tag_set和blk-mq模型的数据结构衔接了起来。
* 强调*
图中涉及到两个数量:
1.num表示的是该队列的size,但不是以byte为单位的,需要通过vring_size函数进行计算
2.nr_vqs表示的是虚拟队列的数量、也就是虚拟硬件支持的硬件队列数量
virtblk_probe函数
主要流程:
1.调用ida_simple_get函数得到了一个新id值,这个id将在创建磁盘名字的时候派上用场
2.得到硬件上支持多少个segments(因为都是聚散IO,这个s