SCIOREAD (读) SCSI 适配器设备驱动程序 ioctl 操作

用途

向选定的 SCSI 设备发出单块 SCSI 命令。

描述

SCIOREAD 操作允许调用者对所选适配器发出 SCSI 设备 命令。 系统管理例程使用此命令来配置 SCSI 设备。

SCIOREAD 操作的 阿尔格 参数是一个 sc_readblk 结构的地址。 此结构在 /usr/include/sys/scsi.h 头文件中定义。

此命令会导致 SCSI 适配器设备驱动程序发出 6 字节格式的 ANSI SCSI-1 命令。 该命令设置为仅读取一个块。 调用者提供:

  • 目标设备 SCSI 和 LUN 标识
  • 要读取的逻辑块号
  • 设备上块的长度 (以字节为单位)
  • 命令的超时值 (以秒计)
  • 指向要将返回的数据放置在其中的应用程序缓冲区的指针
  • Flags 参数

此命令的最大块长度为 4096 个字节。 如果发现该长度大于此值,那么将拒绝该命令。

在对该操作进行初始调用时,不得设置标志参数的 SC_ASYNC 标志。 仅当发生总线故障时,并且仅当这是调用者在发生此错误后的最后一次重试尝试时,才设置此标志。

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

返回值

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

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

文件

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