__bread()总是返回PAGE_SIZE个字节数吗?

时间:2012-08-02 09:26:23

标签: io linux-kernel

Linux内核API有一个__bread方法:

__bread(struct block_device *bdev, sector_t block, unsigned size)

返回一个buffer_head指针,其数据字段包含 size 值的数据。但是,我注意到超出 size 字节的读数仍然给出了有效数据,最多可达PAGE_SIZE数字节。这让我想知道我是否可以假设* __ bread *返回的buffer_head总是包含值为PAGE_SIZE字节的有效数据,即使传递给它的 size 参数较小。

或许这只是一个巧合。

1 个答案:

答案 0 :(得分:1)

__bread从给定的块接口执行读取IO,但是根据后备存储,您会得到不同的结果。

对于硬盘驱动器,块设备将获取扇区大小的数据。通常这是512字节或4K。如果是512个字节,并且要求256个字节,那么您将能够访问扇区的最后部分。因此,您可以获取扇区大小。然而,并非总是如此。对于内存支持的设备,您可能只访问256个字节,因为它不是由块层提供,而是由VSL提供。

简而言之,没有。您不应该依赖此功能,因为它取决于哪个块设备支持存储,也可能随块层实现而改变。