[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