[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