[PATCH v4] nvme: change nvme_ns_has_pi() to nvme_ns_supports_pract()

Tokunori Ikegami ikegami.t at gmail.com
Wed Oct 23 07:44:13 PDT 2024


On 2024/10/23 22:21, Keith Busch wrote:
> On Wed, Oct 23, 2024 at 06:19:03AM -0700, Christoph Hellwig wrote:
>> On Wed, Oct 23, 2024 at 07:14:20AM -0600, Keith Busch wrote:
>>> You can't just have a patch declare that PRACT works this way. The spec
>>> says it only works if ms == PI tuple size, otherwise it doesn't do
>>> anything.
>> Well, that means the patch as-is is broken, isn't it?
> That's what I've been saying since v1. For some reason that feedback
> isn't getting through...
Sorry for wasting your time and confusing but if you have a time please 
let me confirm again below. (It is okay when you have a time case.)
About the mention "The spec says it only works if ms == PI tuple size, 
otherwise it doesn't do anything." do you mention for example the 
specification description below?
--------------------------------------------------------------------------------
(NVM-Express-NVM-Command-Set-Specification-Revision-1.1-2024.08.05-Ratified)
5.3.2.1 Protection Information and Write Commands
Figure 166 provides some examples of the protection information 
processing that may occur as a side effect
of a Write command.
...
If the namespace is formatted with protection information and the PRACT 
bit is set to ‘1’, then:
...
2. If the namespace is formatted with Metadata Size greater than 
protection information size, then the
logical block data and the metadata are transferred from the host buffer 
to the controller. As the
metadata passes through the controller, the controller overwrites the 
protection information portion
of the metadata without checking the protection information portion 
regardless of PRCHK settings.
The logical block data and metadata are written to the NVM (i.e., the 
metadata field remains the
same size in the NVM and the host buffer). The location of the 
protection information within the
metadata is configured when the namespace is formatted (refer to the DPS 
field in Figure 114).
Figure 166: Write Command 16b Guard Protection Information Processing
...
[figure b]
b) MD>8 (e.g., 16), PI, PRACT=0: Metadata remains same size in NVM and 
host buffer
...
[figure d]
d) MD>8 (e.g., 16), PI, PRACT=1: Metadata remains same size in NVM and 
host buffer
--------------------------------------------------------------------------------
In the example case b) and d) the 16B MD data should be sent by the host 
application but the driver does not set or handle any 8MD and 8PI. Is 
this understanding correct?
By the way actually does the kernel nvme driver support the ms >= PI 
LBAF case as correct by the current implementation? (Seems only 
supported for the ms == PI LBAF case only.)
   Note: Only the function nvme_configure_metadata() checks the ms >= PI 
case to set PI type.



More information about the Linux-nvme mailing list