iodone 内核服务

用途

执行块 I/O 完成处理。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/buf.h>
void iodone ( bp)
struct buf *bp;

参数

描述
bp 指定其 I/O 已完成的缓冲区的地址 布夫 结构

在支持存储密钥的平台上,所传递的 英国石油 参数必须位于 KKEY_PUBLICKKEY_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 例程。 例如, 逻辑卷设备驱动程序 可以按照以下过程进行操作:

  1. 获取对逻辑卷的请求。
  2. 分配缓冲区头。
  3. 将逻辑卷请求转换为物理卷请求。
  4. 使用有关物理卷请求的信息更新已分配的缓冲区头。 这包括设置b_iodone缓冲区头字段到单个 iodone 例程的地址。
  5. 调用物理卷设备驱动程序策略例程。

    这里,逻辑卷策略例程的调用者设置了一个 iodone 例程,该例程在逻辑卷请求完成时启动。 逻辑卷策略例程则会设置在物理卷请求完成时调用的 iodone 例程。

此示例的关键点是,只有策略例程的调用者才能设置 iodone 例程,并且即使这样,也只能在缓冲区头中设置请求时执行此操作。

约奥 one 例程的接口与 约奥 one 服务所使用的接口相同。

执行环境

可以从 流程中断 环境中调用 约奥 one 内核服务。

返回值

约奥 one 服务没有任何返回值。