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 内核密钥保护的存储器分配的。