SCIORESET (重置) SCSI 适配器设备驱动程序 ioctl 操作

用途

允许调用者强制 SCSI 设备释放所有当前预留,清除所有当前命令,并返回到初始状态。

描述

SCIORESET 操作允许调用者强制 SCSI 设备释放所有当前预留,清除所有当前命令,并返回到初始状态。 系统管理例程使用此操作来强制 SCSI 控制器在多发起方环境中释放相互竞争的 SCSI 发起方的预留。

此操作实际将 SCSI 总线设备复位 (BDR) 消息执行到所选适配器上的所选 SCSI 控制器。 BDR 消息被定向至 SCSI 标识。 因此,与该 SCSI 标识关联的所有逻辑单元号 (LUN) 都受 BDR 执行的影响。

要使操作有效运行,应该在 SCIORESET 操作后通过相应的 SCSI 设备驱动程序发出 SCSI Reserve 命令。 通常, SCSI 设备驱动程序打开逻辑会发出 SCSI Reserve 命令。 这会阻止另一个发起方声明设备。

从释放所有保留 (通过 SCIORESET 操作) 到再次保留设备 (通过来自主机的 SCSI 保留命令) 之间存在有限的时间。 在此时间间隔内,另一个 SCSI 发起方可以改为保留设备。 如果发生这种情况,那么来自该主机的 SCSI Reserve 命令将失败,并且设备仍由竞争发起程序保留。 阻止此事件或从此事件进行恢复所需的功能超出了 SCSI 适配器设备驱动程序和 SCSI 设备驱动程序组件的范围。

SCIORESET 操作的 阿尔格 参数使调用者能够指定要重置的设备的 SCSI 标识。 阿尔格 参数中最不重要的字节是 SCSI 控制器上的 LUN 的 LUN 标识。 LUN 标识所指示的设备应该已通过对 SCIOSTART 操作的调用成功启动。 下一个最不重要的字节是 SCSI 标识。 剩余的两个字节是保留的,必须设置为值 0。

示例

  1. 以下示例演示此命令的实际使用。 假定 SCSI 标识为 1 ,并且在此 SCSI 控制器上存在 0 的 LUN。
    open SCSI adapter device driver
    SCIOSTART SCSI ID=1, LUN=0
    SCIORESET SCSI ID=1, LUN=0 (to free any reservations)
    SCIOSTOP SCSI ID=1, LUN=0
    close SCSI adapter device driver
    open SCSI device driver (normal open) for SCSI ID=1, LUN=0
    ...
    Use device as normal
    ...
  2. 要使用 SCSI 设备驱动程序的 SC_FORCED_OPEN 标志,请执行以下操作:
    open SCSI device driver (with SC_FORCED_OPEN flag) 
    for SCSI ID=1, LUN=0
    ...
    按正常方式使用设备。

这两个示例都假定 SCSI 设备驱动程序 调用在所选设备上执行 SCSI Reserve 命令。

SCSI 适配器设备驱动程序在执行此命令期间执行正常的错误恢复过程。 例如,如果 BDR 消息导致 SCSI 总线挂起,那么将启动 SCSI 总线重置以清除此情况。

返回值

成功完成后,此操作将返回值 0。 否则,将返回 -1 值,并将 errno 全局变量设置为以下值之一:

描述
EINVAL 指示在执行此命令之前未发出 SCIOSTART 命令。
EIO 指示发生不可恢复的 I/O 错误。 在此情况下,会将适配器错误状态信息记录在系统错误日志中。
EIO 指示设备已停止,或设备驱动程序无法将代码置顶。
ENOCONNECT 表示发生了总线故障。 调用者应该通过在所传递参数的标志字节中设置 SC_ASYNC 标志进行重试来进行响应。 如果尝试了多次重试,那么仅应在设置了 SC_ASYNC 标志的情况下进行最后一次重试。 通常, SCSI 适配器设备驱动程序无法确定哪个设备导致了总线故障,因此此错误不会记录在系统错误日志中。
ENODEV 指示无法选择目标 SCSI 标识或目标 SCSI 标识未响应。 此条件并不一定是错误,并且不会记录。
ENOMEM 指示没有足够的内存可用于完成命令。
ETIMEDOUT 指示适配器未在内部命令超时值到期之前以状态进行响应。 将记录此错误。

文件

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