特性配置 - 深入分析: Namespace Attachment 命令 (第292页)
深入分析: Namespace Attachment 命令
Namespace Attachment 命令概述
Namespace Attachment 命令用于将控制器附加到命名空间,或从命名空间中分离。这一命令是持久的,即使在系统重置后,命名空间的附加或分离状态依旧有效。它对虚拟化管理命令(如将次级控制器设置为离线)也有持久效果。
命令结构
- Data Pointer (DPTR):
Data Pointer指向数据缓冲区的起始位置。如果使用 PRP(Physical Region Pages)时,数据缓冲区不能跨越多个页面边界,因此Data Pointer不应指向 PRP 列表。-
这个字段用于指定控制器附加或分离命名空间时使用的数据缓冲区。
-
Command Dword 10:
- Select (SEL) 字段:用于指定执行的操作类型。
0h:控制器附加(Controller Attach)1h:控制器分离(Controller Detach)2h至Fh:保留(Reserved)
该字段决定命名空间的附加或分离行为,基于 SEL 字段的值,执行不同的命令。
命令执行
- 命令完成:执行完成后,控制器会向 Admin Completion Queue 发送一条完成队列条目,指示命令的执行状态。
- 状态码:以下是可能的命令执行状态值:
18h- Namespace Already Attached:命名空间已经附加了控制器。19h- Namespace Is Private:命名空间是私有的,无法附加到控制器,因为它已经附加到了一个控制器。1Ah- Namespace Not Attached:无法分离控制器,因为该控制器未附加到命名空间。1Ch- Controller List Invalid:提供的控制器列表无效或包含了管理控制器。25h- ANA Attach Failed:由于 ANA 条件(如附加控制器会导致 ANA Persistent Loss 状态)导致无法附加控制器。27h- Namespace Attachment Limit Exceeded:附加命名空间到控制器导致超出了最大命名空间附加限制。29h- I/O Command Set Not Supported:控制器不支持命名空间所需的 I/O 命令集,导致无法附加控制器。2Ah- I/O Command Set Not Enabled:I/O 命令集配置文件未启用,导致无法附加控制器。
命令完成后的处理
- 如果命令失败,错误信息会在 Error Information Log 中详细记录,并报告出错的字节偏移位置。
- 如果执行过程中遇到错误,控制器会停止进一步处理控制器列表中的条目。
总结
Namespace Attachment 命令是管理命名空间与控制器间关系的重要工具,通过该命令,系统能够灵活地将命名空间附加或分离到不同的控制器。命令通过 Select (SEL) 字段指定操作类型,并通过一系列错误代码确保操作的健壮性和正确性。通过这些状态码,系统能够识别并处理不同的错误情况,确保命名空间和控制器的合理配置和管理。