breada 内核服务
用途
在指定块中读取,然后在预读块上启动 I/O。
语法
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/buf.h>
struct buf *breada (dev, blkno, rablkno)
dev_t dev;
daddr_t blkno;
daddr_t rablkno;参数
| 项 | 描述 |
|---|---|
| dev | 指定包含要读取的块的设备。 |
| 布尔克诺 | 指定要读取的块。 |
| 拉布克诺 | 指定要读取的读预读块。 |
描述
面包 内核服务将一个缓冲区分配给给定块。 如果指定的块已在缓冲区高速缓存中,那么将调用 面包 服务以执行以下操作:
- 获取块。
- 返回缓冲区头。
否则,将调用 格布尔克 服务以将可用缓冲区分配给指定块,并将数据读取到缓冲区中。 面包 服务会等待 I/O 完成,然后返回缓冲区头。
如果空闲列表不为空,并且该块尚未在高速缓存中,那么也会在指定的预读块上启动 I/O。 但是, 面包 服务不会等待该预读块上的 I/O 完成。
执行环境
面包 内核服务只能从进程环境中进行调用。
返回值
面包 服务会返回所选缓冲区的头的地址。 中的 B_ERROR 的非零值b_flags缓冲区头 (布夫 结构) 的字段指示错误。 如果发生这种情况,那么调用者应该使用 布雷尔塞 内核服务来释放与块相关联的缓冲区。
在支持存储密钥的平台上,缓冲区头是从受 KKEY_BLOCK_DEV 内核密钥保护的存储器分配的。