iodone 内核服务
用途
执行块 I/O 完成处理。
语法
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/buf.h> void iodone ( bp)
struct buf *bp;
struct buf *bp;
参数
| 项 | 描述 |
|---|---|
| bp | 指定其 I/O 已完成的缓冲区的地址 布夫 结构 。 在支持存储密钥的平台上,所传递的 英国石油 参数必须位于 KKEY_PUBLIC 或 KKEY_BLOCK_DEV 保护域中。 |
描述
当块 I/O 请求完成时,设备驱动程序将调用 约奥 one 内核服务。 在调用 约奥 one 服务后,设备驱动程序不得引用或改变缓冲区头或缓冲区。
根据当前中断级别, 约奥 one 服务执行两个操作中的一个。 它直接调用调用者的个别 约奥 one 例程,或者在 INTIODONE 中断级别将缓冲区的 I/O 完成处理调度为在非级别执行。 然后,此级别的中断处理程序将调用各个设备驱动程序的 iodone 例程。 无论在哪一种情况下,单独的 iodone 例程都由以下项定义: b_iodone缓冲区头中的 缓冲区头字段。 此 iodone 例程是由设备策略例程的调用者设置的。
例如,文件 I/O 系统调用会设置一个例程,用于执行缓冲 I/O 完成处理。 乌普希西奥 服务会设置用于执行原始 I/O 完成处理的例程。 同样,寻呼机设置用于执行缺页故障完成处理的例程。
设置 iodone Routine
在某些情况下,设备驱动程序可设置 约奥 one 例程。 例如, 逻辑卷设备驱动程序 可以按照以下过程进行操作:
- 获取对逻辑卷的请求。
- 分配缓冲区头。
- 将逻辑卷请求转换为物理卷请求。
- 使用有关物理卷请求的信息更新已分配的缓冲区头。 这包括设置b_iodone缓冲区头字段到单个 iodone 例程的地址。
- 调用物理卷设备驱动程序策略例程。
这里,逻辑卷策略例程的调用者设置了一个 iodone 例程,该例程在逻辑卷请求完成时启动。 逻辑卷策略例程则会设置在物理卷请求完成时调用的 iodone 例程。
此示例的关键点是,只有策略例程的调用者才能设置 iodone 例程,并且即使这样,也只能在缓冲区头中设置请求时执行此操作。
约奥 one 例程的接口与 约奥 one 服务所使用的接口相同。
执行环境
返回值
约奥 one 服务没有任何返回值。