0

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参数较小。

或许这只是一个巧合。

4

1 回答 1

1

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

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

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

于 2012-08-02T21:45:39.700 回答