devstrat 内核服务
用途
调用块设备驱动程序的策略例程。
语法
#include <sys/types.h>
#include <sys/errno.h> int devstrat ( bp)
struct buf *bp;
struct buf *bp;
参数
| 项 | 描述 |
|---|---|
| bp | 指向用于指定块传输参数的 布夫 结构。 |
描述
内核或内核扩展调用 德夫斯特拉特 内核服务以请求将块数据传输到具有指定设备号的设备或从该设备进行数据传输。 可在 布夫 结构中找到此设备号。 德夫斯特拉特 服务仅可用于设备驱动程序的块类。
德夫斯特拉特 服务会调用设备驱动程序的 ddstrategy 例程。 在设备开关表中找到此例程,该设备驱动程序与在设备开关表中找到的指定设备号相关联。b_dev。 该 b_dev在 英国石油 参数所指向的 布夫 结构中找到字段。 德夫斯特拉特 服务的调用者必须在以下位置指定 约奥 one 例程:b_iodone布夫 结构的字段。 在从设备驱动程序的 ddstrategy 例程返回之后, 德夫斯特拉特 服务会返回,而不会等待执行 I/O。
在多处理器系统上,缺省情况下,所有 约奥 one 例程都在系统引导时启动的第一个处理器上运行。 这确保与单处理器设备驱动程序兼容。 如果 约奥 one 例程已设计为多处理器安全的,请在以下项中设置 B_MPSAFE 标志:b_flags传递到 德夫斯特拉特 内核服务的 布夫 结构的字段。 然后, 约奥 one 例程将在任何可用的处理器上运行。
如果设备主号码无效,或者指定的设备不是块设备驱动程序,那么 德夫斯特拉特 服务将返回 ENODEV 返回码。 如果设备号有效,那么会使用指向 布夫 结构 (由 英国石油 参数指定) 的指针来调用设备驱动程序的 ddstrategy 例程。
执行环境
可以从进程或中断环境中调用 德夫斯特拉特 内核服务。
注: 仅当 德夫斯特拉特 内核服务的优先级级别为 INTIODONE 或更低时,才能在中断环境中调用该服务。
返回值
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 指示操作成功。 |
| ENODEV | 指示设备号无效,或者未注册任何 ddstrategy 例程。 如果指定的设备不是块设备驱动程序,那么也会返回此值。 如果发生此错误,那么 德夫斯特拉特 服务可能会导致缺页故障。 |