[PATCH] nvme: check PI size if metadata size or below
Keith Busch
kbusch at kernel.org
Tue Oct 22 09:54:48 PDT 2024
On Wed, Oct 23, 2024 at 01:34:27AM +0900, Tokunori Ikegami wrote:
> - if ((io.control & NVME_RW_PRINFO_PRACT) &&
> - (ns->head->ms == ns->head->pi_size)) {
> + if (io.control & NVME_RW_PRINFO_PRACT &&
> + ns->head->ms >= ns->head->pi_size) {
> /*
> * Protection information is stripped/inserted by the
> * controller.
> diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
> index 093cb423f536..fbcb2243ba84 100644
> --- a/drivers/nvme/host/nvme.h
> +++ b/drivers/nvme/host/nvme.h
> @@ -542,7 +542,7 @@ struct nvme_ns {
> /* NVMe ns supports metadata actions by the controller (generate/strip) */
> static inline bool nvme_ns_has_pi(struct nvme_ns_head *head)
> {
> - return head->pi_type && head->ms == head->pi_size;
> + return head->pi_type && head->ms >= head->pi_size;
> }
It would have been nice if PRACT worked this way, but spec says it
doesn't. The control bit is a no-op if Metadata Size does not equal the
PI size, which is what these checks are looking for, so we can't take
this.
More information about the Linux-nvme
mailing list