SCIOTUR (测试单元就绪) SCSI 适配器设备驱动程序 ioctl 操作
用途
向所选 SCSI 设备发送 "测试单元就绪" 命令。
描述
SCIOTUR 操作允许调用者向所选 SCSI 适配器发出 "SCSI 测试单元读" (SCIOSTUNIT) 命令。 此命令由系统管理例程使用以帮助配置 SCSI 设备。
sc_ready 结构允许调用者在要接收 SCIOTUR 操作的 SCSI 适配器上指定设备的 SCSI 和逻辑单元号 (LUN) 标识。 此命令的 SC_ASYNC 标志 (在 阿尔格 参数块的标志字节中) 必须为 在初始尝试期间未设置 。 sc_ready 结构提供两个输出字段:status_validity和scsi_status。使用这两个字段, SCIOTUR 操作会将状态返回给调用者。 SCIOTUR 操作的 arg 参数指定 /usr/include/sys/scsi.h 文件中定义的 sc_ready 结构的地址。
当接收到 EIO 的 错误号 值时,调用者应该对以下项中返回的状态进行求值:status_validity和scsi_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字段设置为 "检查条件" 状态,那么应该跳过设备。
返回值
成功完成后,此操作将返回值 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 快速/宽适配器 /A 和 SCSI-2 差分快速/宽适配器 /A 设备驱动程序访问 SCSI 设备或适配器。 |