SCIOTUR (测试单元就绪) SCSI 适配器设备驱动程序 ioctl 操作

用途

向所选 SCSI 设备发送 "测试单元就绪" 命令。

描述

SCIOTUR 操作允许调用者向所选 SCSI 适配器发出 "SCSI 测试单元读" (SCIOSTUNIT) 命令。 此命令由系统管理例程使用以帮助配置 SCSI 设备。

sc_ready 结构允许调用者在要接收 SCIOTUR 操作的 SCSI 适配器上指定设备的 SCSI 和逻辑单元号 (LUN) 标识。 此命令的 SC_ASYNC 标志 (在 阿尔格 参数块的标志字节中) 必须为 在初始尝试期间未设置 sc_ready 结构提供两个输出字段:status_validityscsi_status。使用这两个字段, SCIOTUR 操作会将状态返回给调用者。 SCIOTUR 操作的 arg 参数指定 /usr/include/sys/scsi.h 文件中定义的 sc_ready 结构的地址。

当接收到 EIO错误号 值时,调用者应该对以下项中返回的状态进行求值:status_validityscsi_status字段。 该status_validity字段设置为值 SC_SCSI_ERROR ,以指示scsi_status字段中具有有效的 SCSI 总线状态。 /usr/include/sys/scsi.h 文件包含scsi_status:NONE.

SCIOSTUNIT 操作后,调用程序可以通过 SCSI 总线状态来判断设备是否已准备就绪。 如果返回了 EIO错误号 值,并且status_validity字段设置为 0 ,发生了未恢复的错误。 如果在重试时获得相同的结果,那么应该跳过该设备。 如果指定了status_validity字段设置为 SC_SCSI_ERROR ,并且scsi_status字段指示 "检查条件" 状态,那么应该在延迟几秒钟后发送另一个 SCIOTUR 命令。

在一次或多次尝试后, SCIOTUR 操作应返回成功完成的结果,指示设备已成功启动。 如果经过几秒钟后, SCIOTUR 操作仍返回scsi_status字段设置为 "检查条件" 状态,那么应该跳过设备。

注: SCSI 适配器设备驱动程序在执行此命令期间执行正常的错误恢复过程。

返回值

成功完成后,此操作将返回值 0。 对于 SCIOTUR 操作,这意味着目标设备已成功启动,并且已准备好进行数据访问。 如果操作不成功,则返回 -1 值,errno 全局变量将被设置为以下值之一:

描述
EFAULT 指示发生内核与用户空间之间的错误副本。
EINVAL 指示在执行此命令之前未发出 SCIOSTART 操作。
EIO 指示由于发生不可恢复的 I/O 错误,适配器设备驱动程序无法完成命令。 如果接收到 EIO ,那么调用者应至少重试此命令一次,因为第一个命令可能已清除了设备的错误情况。 发生未恢复的 I/O 错误后,适配器错误状态信息将记录在系统错误日志中。
ENOCONNECT 指示发生了总线故障。 在已传递参数的标志字节中设置 SC_ASYNC 标志后,调用者应重试。 如果尝试了多次重试,那么仅应在设置了 SC_ASYNC 标志的情况下进行最后一次重试。 通常, SCSI 适配器设备驱动程序无法确定哪个设备导致了 SCSI 总线故障,因此不会记录此错误。
ENODEV 指示没有 SCSI 控制器响应请求的 SCSI 标识。 此条件并不一定是错误,并且不会记录。
ENOMEM 指示没有足够的内存可用于完成命令。
ETIMEDOUT 指示在内部命令超时值到期之前,适配器未以状态进行响应。 如果接收到此返回值,那么调用者应该至少重试此命令一次,因为第一个命令可能已清除了设备的错误情况。 此错误记录在系统错误日志中。

文件

描述
/dev/scsi0/dev/scsi1.../dev/scsin 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备或适配器。
/dev/vscsi0, /dev/vscsi1, ... , /dev/vscsim 提供一个接口以允许 SCSI-2 快速/宽适配器 /ASCSI-2 差分快速/宽适配器 /A 设备驱动程序访问 SCSI 设备或适配器。