6.17 Write Zeroes command
“Write Zeroes”命令用于将逻辑块范围设置为零。该命令相关的NON-PI metadata(存在保护信息以外的元数据。)应将所有字节清为0h。写入到介质的逻辑块的保护信息会基于CDW12.PRINFO更新。若Protection Information Action bit (PRACT)被清除为“ 0”,则该命令的保护信息应全为零。如果Protection Information Action bit (PRACT)设置为“ 1”,则保护信息应基于“Identify Namespace”数据结构中的End-to-end Data Protection Type Settings(DPS)字段(请参见图245),以及“write zeroes”命令中的CDW15.EILBRT,CDW15.ELBATM和CDW15.ELBAT字段。
成功完成此命令后,此范围内逻辑块的后续读取返回的值应全部清除为0h,直到对该LBA范围进行写操作为止。
如果在Write Zeroes命令中将Deallocate位(CDW12.DEAC)设置为“ 1”,并且命名空间支持将从已释放的逻辑块及其元数据(不包括保护信息)读的值(例如DLFEAT字段中的位2:0设置为001b)中的所有字节清除为0h,然后对于每个指定的逻辑块,控制器:
•可以释放该逻辑块;
•应返回从以下读取的值中所有清零的字节:
o该逻辑块;
o该逻辑块的元数据(不包括保护信息);
•应基于该Write Zeroes命令中的CDW12.PRINFO在该逻辑块中返回保护信息。
如果在Write Zeroes命令中将Deallocate位清除为'0',从释放的Logical block读到的值和它的metadata, namespace支持清空所有的bytes为0(例如,将DLFEAT字段中的位2:0设置为001b) 及其元数据(不包括保护信息),然后对于每个指定的逻辑块,控制器:
•可以释放该逻辑块;
•应返回从以下值读取的值中所有清零的字节:
o该逻辑块;
o逻辑阻止元数据(不包括保护信息);
•应基于该Write Zeroes命令中的CDW12.PRINFO在该逻辑块中返回保护信息。
对于由Write Zeroes命令指定范围内的每个逻辑块,如果namespace不支持该逻辑块,则将从该逻辑块读取的值及其元数据(不包括保护信息)的所有字节清除为0h,控制器 不得释放该逻辑块。
使用的字段是“Command Dword10”,“Command Dword11”,“Command Dword 12”,“Command Dword 14”和“Command Dword 15”字段。
Bits | 描述 |
63:00 | Starting LBA(SLBA):这个字段指示了要作为操作一部分写入的第一个逻辑块的64位地址。 Command Dword 10 contains bits 31:00; Command Dword 11 contains bits 63:32. |
Bits | 描述 |
31 | Limited Retry (LR): 如果设置为“ 1”,则控制器应进行有限的重试。 如果将其清除为“ 0”,则控制器将应用所有可用的错误恢复手段将数据写入NVM。 |
30 | Force Unit Access (FUA): 如果设置为“ 1”,则控制器应在指示命令完成之前将数据和元数据(如有)写入非易失性介质。 其他命令没有隐含的顺序。 如果清除为0,则该位无效。 |
29:26 | Protection Information Field (PRINFO): 指定保护信息操作和检查字段,如图355中所定义。保护信息检查(PRCHK)字段应清除为000b。 |
25 | Deallocate (DEAC): 如果设置为“ 1”,则主机正在请求控制器释放指定的逻辑块。 如果将其清除为“ 0”,则主机不请求控制器释放指定的逻辑块。 |
24:16 | 保留字段 |
15:00 | Number of Logical Blocks (NLB): 该字段指示要写入的逻辑块的数量。 这是一个基于0的值。 |
Bits | 描述 |
31:00 | nitial Logical Block Reference Tag (ILBRT): 该字段指示初始 Logical Block Reference Tag 值。 仅当namespace的格式设置为使用端到端保护信息时,才使用此字段。 请参阅第8.3节。 |
Bits | 描述 |
31:16 | Logical Block Application Tag Mask (LBATM): 表示Application Tag Mask 的值,仅当namespace的格式设置为使用端到端保护信息时,才使用此字段。 请参阅第8.3节。 |
15:00 | Logical Block Application Tag (LBAT): 表示Application Tag 值,仅当namespace的格式设置为使用端到端保护信息时,才使用此字段。 请参阅第8.3节。 |
6.17.1 Command Completion
完成“Write Zeroes”命令后,控制器应将完成队列条目发布到关联的I / O完成队列中,以指示该命令的状态。
Write Zeroes命令的特定状态值在图414中定义。
Bits | 描述 |
81h | Invalid Protection Information: 该命令中指定的Protection Information Field (PRINFO)(请参阅图411)设置对于格式化了namespace的保护信息无效(请参阅图328中的PI字段和图245中的DPS字段)或ILBRT无效 字段无效(请参阅第8.3.1.5节)。 |
82h | Attempted Write to Read Only Range: 指定的LBA范围包含只读块。 如果介质上的只读是名称空间的写保护状态更改的结果,则控制器不得返回此状态值(请参阅第8.19节)。 |