helun 发表于 2009-05-13 10:32

bio_vec,scatterlist?

struct bio_vec{
struct page *bv_page;
unsigned int bv_len;
unsigned int bv_offset;
}
这是bio_vec结构体,看宋宝华的书在介绍块设备驱动时上面一直讲段的概念,看了几遍才明白书上说得段是bio_vec结构体.但是我想问一下,是不是每个段只包含一页吗?可以包含多页吗?由谁指示,是不是由bv_len指明呢?如果包含多个页,那么另外的页是不是和page指向的页相邻,若不是,那这个段又是如何包含多个页呢?
还是这本书在讲DMA时,也一直说段的概念,不过那里的段指的是:scatterlist结构体,和bio_vec非常相似,同样也有上面的问题,可以包含多个页吗?
这是小弟的一点理解不知对不对,请高手不吝赐教。

hb12112 发表于 2009-05-13 11:02

这里的段说的应该是bio结构吧,一个请求可以由多个bio组成.
bio下有个bi_io_vec结构体数组.
每个bi_io_vec标识一个page.

hb12112 发表于 2009-05-13 11:08

刚翻了下书,有几个地方提到"段"呵.
在介绍bio_for_each_segment宏时,这里的段应该是指bi_io_vec结构.

helun 发表于 2009-05-13 14:19

hb12112:每个bi_io_vec标识一个page.
每一个段只标识一个page吗?
bio_io_vec确实是一个段,那么小弟想知道1楼问几个问题的答案?

hb12112 发表于 2009-05-13 14:40

bio_io_vec只能标识一个page,bv_len是在这个page中请求的长度.
vec的个数由bio结构中的bi_cnt字段标识.

DMA的scatterlist不知道.

helun 发表于 2009-05-14 11:37

thanks very much!

dean_go 发表于 2014-05-21 09:42

你好,请问vec标识一个页,就是8扇区,这八个扇区在硬盘上也是连续的吧?还有,我取到八个扇区的数据后,是应该覆盖这个页,还是按照bvlen和bvoffset只写指定区域?

黎明748 发表于 2014-05-22 10:58

bv_page只包含一个页。一个段是一个内存页或者内存页的一部分。bv_len是段长度。bv_offset是段在页中的偏移量。

黎明748 发表于 2014-05-22 10:59

scatterlist没看过。应该是类似的。
页: [1]
查看完整版本: bio_vec,scatterlist?